如何访问继承给内部类的抽象类属性
本文关键字:内部类 抽象类 属性 继承 何访问 访问 | 更新日期: 2023-09-27 17:53:12
假设我有一个内部类"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)可以使用反射来访问对象
的成员object obj = <instance of your internal type>;
var value = obj.GetType().GetProperty("abc").GetValue(obj);
你可以引入一个公共接口,它将提供一个访问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;}
}
}
外部代码可以通过using Interface
访问属性var accessor = (IAbcAccessor)<instance of your internal type>;
var value = accessor.abc;
不能在声明B的程序集之外创建B的实例或将任何东西声明为B类型。如
B b = whatever
或
A b = new B()
不允许在声明B的程序集之外使用。
但是如果你有一个公共方法
public class C
{
public static A MakeAB()
{
return new B();
}
}
在B声明所在的程序集中,那么use可以说
A a = C.MakeABe()
类型B不需要被c的调用者知道。makeab ()