【问题标题】:C# inheritance pass down template valuesC# 继承传递模板值
【发布时间】:2014-04-01 21:16:19
【问题描述】:

我得到一种树继承关系。每个上层节点都可以视为模板值。并且较低的节点具有完全相同的值和一些新列(值的种类)。

我想知道是否有简单的方法可以将这些值从上层节点传递到下层节点。

我的代码如下:

    public class rootData
    {
        public long sID;
        public string sName;
        public string title;
        public string country;

       <many....many...columns>

    };

    public class sub1 : rootData
    {
        public void load(rootData template)
        {
            this.sID= template.sID;
            this.sName= template.sName;
            this.title= template.title;
            this.country= template.country;

            <many....many...asigns>
        }
        public int sNumberA;
        public int sNumberB;
    };

我想知道:有没有像这样写的方法

this.everything=template.everything

替换那么多行的赋值:

            this.sID= template.sID;
            this.sName= template.sName;
            this.title= template.title;
            this.country= template.country;

            <many....many...asigns>

【问题讨论】:

  • 如何将关系从“is-a”更改为“has-a”?
  • 是的,我只想要“has-a”然后怎么做?
  • 我强烈建议将这些字段转换为属性。
  • 在这个例子中,如果我改变模板的值,它应该改变派生的 sub1 值吗?
  • 实际上...上限值永远不会改变...永远不要考虑这个

标签: c# oop inheritance multiple-inheritance


【解决方案1】:

rootData 设为sub1 中的一个字段,并向构造函数添加一个用于填充该字段的参数。如果rootData 中的字段主要是“哑”标签,我会将其设为struct,以说明它只是一个简单的数据集合,顶部几乎没有逻辑。

正如 Erik 指出的那样,属性可能会更好。请注意,您可以将 rootData 中的各个字段作为道具公开,并避免向其他类广播您的类的详细信息(即,它有一个 rootData 字段)。

【讨论】:

    【解决方案2】:

    你能不能做到的答案是你想要继承还是组合。你想让sub1 成为rootData 吗?如果是这样,您将需要复制这些值。你想让sub1 包含rootData 吗?如果是这样,你可以让sub1 保存你传入的rootData 的值。当然,如果你这样做,你不能让它成为一个单独的rootData 而不复制这些值。

    我的简短回答是:创建一个函数来复制值。您只需执行一次。

    【讨论】:

      猜你喜欢
      • 2011-08-24
      • 2011-04-17
      • 1970-01-01
      • 2012-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多