【问题标题】:Hierarchy of Classes in C#C#中的类层次结构
【发布时间】:2009-12-31 13:35:28
【问题描述】:

我有这组课程:
节点(超级类)
|----- NodeType1(类)
|---------NodeType2(类)

type1 和 type2 有一些共同的字段(例如:NAME)。 如果我在 SUPER 类(节点)中声明 NAME 字段,我应该如何访问类型类中的这些变量?我怎样才能使这些财产? 感谢您的宝贵时间

【问题讨论】:

    标签: c# class hierarchy


    【解决方案1】:
    class Node
    {
        public string Name { get; set; }
    }
    
    class NodeType1 : Node
    {
        void SomeMethod()
        {
            string nm = base.Name;
        }
    }
    
    class NodeType2 : NodeType1
    {
        void AnotherMethod()
        {
            string nm = base.Name;
        }
    }
    

    【讨论】:

    • 其实,你甚至不需要“基地”。在物业前面
    • 你没有理解我的问题,但我明白你的意思。你有帮助。
    • @Rik,在这种情况下不是,但在一般情况下,可能有一个同名的属性隐藏了基础属性。
    【解决方案2】:

    如果name 字段的access modifierpublicprotected,您将能够在派生类中访问它。修饰符public 将使其对所有其他类可见,而protected 将限制对派生类的可见性。

    无论哪种情况,您都可以像访问当前类中声明的字段一样访问它:

    this._name = "New Name";
    

    如果您希望将其设为属性,则相应地设置它的访问修饰符:

    public class Node
    {
         protected string Name { get; set; }
    }
    

    【讨论】:

    • 因此,如果字段被“保护”,NodeType 将通过 this.Field 访问。然后在 Type 中,我将这些字段设为属性?
    • 公共类节点 { 保护字符串名称 { 获取;放; } } 我试过一次,我一定是搞砸了......它没有成为财产
    • @Ricardo - 您的第一个问题是肯定的(正如您评论的那样,我正在更新我的答案)。关于属性的要点是说适用于属性的规则与适用于字段的规则相同。我不知道为什么你的代码不起作用。您需要发布您的使用情况和错误消息。
    【解决方案3】:

    您可以按照通常访问该字段的方式访问该字段,例如输入this.fieldName。不要忘记将此字段标记为 protected 以在继承者中可见或 public 在继承者和类外部可见。

    class Node
    {
        protected string protectedName;
    }
    
    class NodeType1 : Node
    {
        public string Name
        {
            get
            {
                return protectedName;
            }
        }
    }
    
    class NodeType2 : NodeType1
    {
        protected void Foo()
        {
            string bar = Name;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多