假設我有一個內部類「B」,這是從一個抽象類派生抽象類屬性,例如如何訪問繼承到內部類
abstract class A
{
private int _abc;
public int abc
{
get{return _int;}
set{_abc=value;}
}
}
internal class B:A
{
}
我需要abc,使用不同的組件,我可以訪問它? ??請幫幫我。
假設我有一個內部類「B」,這是從一個抽象類派生抽象類屬性,例如如何訪問繼承到內部類
abstract class A
{
private int _abc;
public int abc
{
get{return _int;}
set{_abc=value;}
}
}
internal class B:A
{
}
我需要abc,使用不同的組件,我可以訪問它? ??請幫幫我。
如果您需要安全是由某種原因內部,你有幾個方式從外部代碼
1)您可以使用InternalVisibleToAttribute授予友好組件
[assembly:InternalVisibleTo("Test.dll")]
接入訪問內部訪問
2)可以使用Reflection訪問對象
object obj = <instance of your internal type>;
var value = obj.GetType().GetProperty("abc").GetValue(obj);
3的成員)可以引入一個公共接口這將提供一份合同給訪問ABC財產
public interface IAbcAccessor
{
int abc {get; set;}
}
internal abstract class A
: IAbcAccessor
{
private int _abc;
public int abc
{
get{return _int;}
set{_abc=value;}
}
int IAbcAccessor.abc
{
get{return abc;}
set{abc = value;}
}
}
外部代碼可以通過使用接口
var accessor = (IAbcAccessor)<instance of your internal type>;
var value = accessor.abc;
不能創建B的實例或聲明什麼的外面是B型的訪問屬性組件B在聲明。如
B b = whatever
或者
A b = new B()
,不允許B在宣佈大會之外。
但是如果你在一個B的聲明中裝配有一個公共的方法
public class C
{
public static A MakeAB()
{
return new B();
}
}
,然後使用可以說
A a = C.MakeABe()
任何裝配
,因爲B型不需要通過C.MakeAB()的調用者
讓你的類'知道公共'或使用屬性'[InternalsVisibleTo(「OtherAssemblyName」)]' –
請不要包含關於問題標題中使用的語言的信息,除非它沒有它沒有意義。標籤用於此目的。 –