Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.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#_Reflection - Fatal编程技术网

C#访问抽象类的字段

C#访问抽象类的字段,c#,reflection,C#,Reflection,是否可以访问抽象类的字段和/或常量? 假设我有代码: public abstract class A { private int A; private int B; public const int months = 12; public int AProp { get{ return A; } set{ A = value; } } public abstract void DoSomething()

是否可以访问抽象类的字段和/或常量? 假设我有代码:

public abstract class A
{
    private int A;
    private int B;

    public const int months = 12;

    public int AProp
    {
        get{ return A; }
        set{ A = value; }
    }

    public abstract void DoSomething();
}

是否可以通过反射检索字段和常量?如果是的话,你能建议怎么做吗?还有,还有更好的方法吗?

如果您希望字段可以从
DoSomething
方法访问,但外部类看不到,最简单的选择是使字段
受保护。这样,它们只能被子类访问,您几乎可以将
protected
视为“抽象类的私有”


当然,区别在于,您可以从其他程序集中实现抽象类。为了避免这种情况,当您询问是否有比反射更好的方法时,您可以使类
内部

,这取决于您试图对抽象类执行的操作。“你能详细说明一下吗?”洛德塔克拉我的意思是说,如果有一种方法可以不使用反射来实现这一点。很抱歉措辞不恰当。@PBrenek如果您可以访问该变量,那么私有修饰符的作用是什么?如果派生类受到保护,您可以从派生类访问这些变量,如果派生类是公共的,则从外部访问这些变量(私有类当然更复杂)。所以,是的,你可以不经思考就做到。您希望如何访问它的一个用例将使我能够告诉您该场景是否有效。您是说从类的特定实例(在本例中是子类的实例)检索它们吗?或者你想做一些抽象的事情吗?