c# - 替换继承中的对象

标签 c# oop inheritance

我有一个包含原始属性和自定义属性的类:

public class Version_1
{
    public string Name { get; set; }
    public int Age { get; set; }
    public WeirdDad Weird { get; set; }
    public MysteriousDad Mysterious { get; set; }
}

将来我想用一个 int 属性和我的自定义对象之一的自定义来扩展这个类,这样:

public class Version_2 : Version_1
{
    public string IdentityCode { get; set; }
    public WeirdChild Weird { get; set; }
}

在 Version_2 类中,WeirdDad 对象的外观已被其子对象 WeirdChild 替换,因此我想替换它。 相反,在此示例中,我将在 Version_2 类中同时拥有 WeirdDad 和 WeirdChild。

你会如何实现这个例子?

最佳答案

我相信你想做的是所谓的方法隐藏。您的 Version_2 类应如下所示:

public class Version_2 : Version_1
{
    public string IdentityCode { get; set; }
    public new WeirdChild Weird { get; set; }
}

当您想从 Version_1 访问“Weird”属性时,您必须调用 base.Weird

但请注意,不推荐这样做,而且会产生代码味道。

关于c# - 替换继承中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33810815/

相关文章:

c# - 在页面/主页面和子页面之间共享相同的 View 模型

PHP 属性不存在但使用时没有抛出错误

swift - 在 swift 中覆盖受限扩展方法的推荐方法,避免消息 "Ambiguous use of ' xxx'"

c++ - 使用指针作为返回类型实现模板化接口(interface)的函数 -> 冲突返回类型错误

c# - List.IndexOf() - 返回最后一次出现的索引而不是第一次出现的索引?

c# - C# 中的音频 API

c# - 有没有一种方法可以使用ObservableCollection和MVVM刷新WPF DataGrid,而无需通知ItemsSource集合?

java - 我在访问 if else 语句中初始化的总价时遇到问题

c++ - 可以用一个重载的运算符来实现另一个运算符重载吗?

java - 如何从 Java 线程中调用 invokeLater 方法?