如何访问继承到内部类的抽象类属性

时间:2014-03-25 09:43:56

标签: c#

假设我有一个内部课程" B"它是从抽象类派生的,例如

abstract class A
{
    private int _abc;
    public int abc
    {
       get{return _int;}
       set{_abc=value;}
    }
}
internal class B:A
{

}

我需要abc在不同的程序集中,我可以访问它吗?请帮我。

2 个答案:

答案 0 :(得分:1)

如果由于某种原因需要在内部安全,您可以通过几种方式从外部代码访问

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;

答案 1 :(得分:0)

您无法在声明B的程序集之外创建B实例或声明任何类型为B的实例.E.g

B b = whatever

A b = new B()

不允许在组件之外声明B。

但是,如果你有一个公共方法

public class C
{
   public static A MakeAB()
   {
      return new B();
   }
}
在声明B的程序集中的

,然后使用可以说

A a = C.MakeABe() 

在任何程序集中,因为类型B不需要被C.MakeAB()的调用者知道