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

本文关键字:内部类 抽象类 属性 继承 何访问 访问 | 更新日期: 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 ()