【问题标题】:Which class do I place the fields related to an object in?我应该将与对象相关的字段放在哪个类中?
【发布时间】:2021-11-03 00:47:52
【问题描述】:

您好,我是 OOP 的新手,我似乎无法找到有关此问题的信息。任何帮助都会很棒。我在 C# 中工作

所以我有一个基础抽象类 Animal 和一个派生类 Pig。我想要其他派生类,例如牛等。每只动物都需要有一个名字。

我是否将 AnimalName 字段作为 protected 放在基类中并使用 base.AnimalName 访问?或者名称字段是否应该作为私有/受保护字段属于派生类?

我的想法是,如果我有需要重写的抽象方法,应该是名称字段不遵循类似的格式,或者应该只是在派生类中声明。

这有约定吗?

【问题讨论】:

标签: c# oop abstract-class


【解决方案1】:

如果属性 Name 是 Animal 所固有的(每个 Animal 都必须拥有它),那么将它放在 Animal 抽象类中,作为受保护的,或者作为私有的,带有 getter 和 setter(更常见)。

【讨论】:

    【解决方案2】:

    @Ivan 描述的abstract class 是个好主意。但是,有时您的命名空间实际上会受益于使用nested classes。然后,您可以用类似的方式覆盖 AnimalName。

    查看此答案了解更多信息:https://stackoverflow.com/a/10507130/14414944

    编辑: 根据 CoolBots 的要求,请查看此 C# Fiddle。那里有一些很好的掘金可供咀嚼。

    我还建议通过阅读 Composition vs. Inheritance in C# 来补充您的 OOP 学习。

    【讨论】:

    • 你能澄清你的答案吗? OP 对 OOP 来说是非常新的(正如他们所说) - 也许 when 嵌套类的示例会是有益的?链接的问题与在 C# 中模拟 C++ friend 关键字有关——根本不是 OP 所要求的。另外,Then,you can overwrite AnimalName in a similar way这句话需要澄清——在哪里覆盖它?在内层?内部类是否继承了外部类?请澄清或删除此答案。谢谢!
    • @CoolBots 更新了我的答案,您介意删除否决票吗?
    • 我删除了我的反对票;感谢您添加 C# Fiddle。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    相关资源
    最近更新 更多