C#如何将新变量的基类中的变量值更改为派生类

Posted

技术标签:

【中文标题】C#如何将新变量的基类中的变量值更改为派生类【英文标题】:C# How to change the Variable Value in the BaseClass if the new Variable into the derived Class are changed 【发布时间】:2017-03-09 13:07:31 【问题描述】:

我有一个更大的 Projekt,如果派生类中的变量值发生更改,我想将变量值更改为 BaseClass。 这里是一个简单的例子。

我想要的是,如果我将值 Obj.ModelTyp.Name 更改为“Name123”,那么 Base.ModelTyp.Name 会自动获得相同的值“Name123”。 有没有简单的方法来做到这一点?

谢谢史蒂芬

命名空间问题

    课堂节目
    
        静态无效主要(字符串 [] 参数)
        
            DataObjekt Obj = 新的 DataObjekt();

            Obj.ModelTyp.Name = "Name123";  // is there a Way to Change Base.ModelTyp.Name  
                                            // if Obj.ModelTyp.Name is changed?
            Obj.ModelTyp.Data = "4567";

            Obj.DoSomithing();
    


public class FirstBaseClass

    public FirstBaseClass()  ModelTyp = new BaseType(); 
    public BaseType ModelTyp  get; set; 


public class SecondBaseClass : FirstBaseClass

    public void DoSomithing()
    
        string Test = this.ModelTyp.Name;  // there is nothing because Base.ModelTyp.Name 
                                          //but I Want to have "Name123"
    


public class DataObjekt : SecondBaseClass

    public DataObjekt()  ModelTyp = new ObjektData(); 
    new public ObjektData ModelTyp  get; set; 


public class BaseType

    public string Name  get; set; 


public class ObjektData : BaseType

    public string Data  get; set; 

【问题讨论】:

您真的想要在您的 DataObjekt 类中有两个名为 ModelTyp 的属性(一个是 BaseData 类型,一个是 ObjektData 类型)? 【参考方案1】:

您的班级关系似乎非常复杂和令人费解。您可能应该考虑简化一下。

无论如何,您的代码现在不起作用的原因是因为您隐藏了基类的ModelTyp 属性,并在DataObjekt 中创建了另一个新的ModelTyp 属性。希望您已经知道这一点。

但是您真的不想创建一个全新的、独立的财产,是吗?您只想将ModelTyp 的类型更改为ObjektData。因此,您可以让DataObjekt.ModelTyp 在构造函数中引用与FirstBaseClass.ModelTyp 相同的东西:

public DataObjekt()  
    ModelTyp = new ObjektData();
    base.ModelTyp = this.ModelTyp; // <- this line

【讨论】:

谢谢 :),这是我正在寻找的行 :)

以上是关于C#如何将新变量的基类中的变量值更改为派生类的主要内容,如果未能解决你的问题,请参考以下文章

访问派生类中的基类成员

在派生构造函数中的某些代码块之后调用派生类中的基类构造函数[重复]

如何影响派生类中受保护的基变量

使用派生类中的基类方法 - 错误

可以通过[重复]在派生类中初始化受保护的基类成员

如何检查几何基类中的碰撞而不转换为派生类