Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何访问继承到内部类的抽象类属性_C# - Fatal编程技术网

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

C# 如何访问继承到内部类的抽象类属性,c#,C#,假设我有一个从抽象类派生的内部类“B”,例如 abstract class A { private int _abc; public int abc { get{return _int;} set{_abc=value;} } } internal class B:A { } 我需要不同组件中的abc,我可以访问它吗???请帮帮我 如果出于某种原因需要对其进行内部安全保护,可以通过几种方式从外部代码进行访问 1) 您可以使用授予访问

假设我有一个从抽象类派生的内部类“B”,例如

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

}

我需要不同组件中的abc,我可以访问它吗???请帮帮我

如果出于某种原因需要对其进行内部安全保护,可以通过几种方式从外部代码进行访问

1) 您可以使用授予访问友好程序集内部构件的权限

[assembly:InternalVisibleTo("Test.dll")]
2) 您可以使用访问对象的成员

object obj = <instance of your internal type>;
var value = obj.GetType().GetProperty("abc").GetValue(obj);
外部代码可以通过使用接口访问属性

var accessor = (IAbcAccessor)<instance of your internal type>;
var value = accessor.abc;
var访问器=(IAbcAccessor);
var值=accessor.abc;

在声明B的程序集之外,无法创建B的实例或将任何对象声明为B类型。例如

B b = whatever

不允许在声明B的程序集之外

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

public class C
{
   public static A MakeAB()
   {
      return new B();
   }
}
在声明了B的程序集中,use可以说

A a = C.MakeABe() 

在任何程序集中,由于C.MakeAB()的调用者不需要知道类型B。请不要在问题标题中包含有关语言的信息,除非没有它就没有意义。标签就是为了这个目的。
public class C
{
   public static A MakeAB()
   {
      return new B();
   }
}
A a = C.MakeABe()