我有一个抽象基类,我想声明一个字段或属性,它在从这个父类继承的每个类中都有不同的值。
我想在基类中定义它,这样我就可以在基类方法中引用它——例如,重写 ToString 以表示“ This object is of type 物业/工地”。 我有三种方法,我可以看到这样做,但我想知道-什么是最好的或接受的方式做到这一点?新手问题,抱歉。
选择1:
使用抽象属性并在继承的类上重写它。这是强制执行的好处(您必须覆盖它) ,而且它是干净的。但是,返回一个硬代码值而不是封装一个字段感觉有点不对,而且只有几行代码而不仅仅是几行代码。我还必须为“ set”声明一个 body,但这并不那么重要(可能有一种方法可以避免那些我不知道的东西)。
abstract class Father
{
abstract public int MyInt { get; set;}
}
class Son : Father
{
public override int MyInt
{
get { return 1; }
set { }
}
}
选择二
我可以声明一个公共字段(或者一个受保护的字段) ,并在继承的类中显式地重写它。下面的例子会给我一个使用“ new”的警告,我也许可以这样做,但是感觉不对,它破坏了多态性,这就是问题的关键所在。这似乎不是个好主意。
abstract class Mother
{
public int MyInt = 0;
}
class Daughter : Mother
{
public int MyInt = 1;
}
选择三
我可以使用一个受保护的字段并在构造函数中设置值。这看起来非常整洁,但依赖于我确保构造函数总是设置这个值,并且对于多个重载的构造函数,总是存在某些代码路径不设置值的可能性。
abstract class Aunt
{
protected int MyInt;
}
class Niece : Aunt
{
public Niece()
{
MyInt = 1;
}
}
这是一个有点理论性的问题,我想答案应该是选项1,因为它是唯一的 安全选项,但我刚刚开始了解 C # ,想问问更有经验的人。