【问题标题】:C# Accessing Fields of an Abstract ClassC# 访问抽象类的字段
【发布时间】:2014-03-13 21:46:49
【问题描述】:

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

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();
}

是否可以通过反射检索字段和常量?如果是的话,你能建议怎么做吗?而且,有没有更好的方法来做到这一点?

【问题讨论】:

  • 当你问,有没有比反射更好的方法,这取决于你试图用抽象类做什么。你能详细说明一下吗?
  • @LordTakkera 我只是说是否有办法在不使用反射的情况下做到这一点。抱歉措辞不佳。
  • @PBrenek 如果您可以访问该变量,那么 private 修饰符的意义何在?
  • 如果它们受到保护,您可以从派生类访问它们,如果它们是公共的,则可以从外部访问它们(当然私有的更棘手)。所以,是的,你可以不加反思地做到这一点。您希望“如何”访问它的用例将使我能够告诉您该场景是否可行。
  • 您是在谈论从类的特定实例(在我们的例子中是子类)中检索它们吗?或者你想做像 Abstract.months 这样的事情吗?

标签: c# reflection


【解决方案1】:

如果您希望这些字段可以通过DoSomething 方法访问,但对外部类不可见,最简单的选择是将您的字段设置为protected。这样它们只能被子类访问,您几乎可以将protected 视为“抽象类的私有”。

当然,不同之处在于您可以从其他程序集中实现抽象类。为避免这种情况,您可以将课程设为internal

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    相关资源
    最近更新 更多