1

我正在使用 .Net 并且有一个简单的主类和子类设计。我的主类包含几乎所有的功能,而子类只需要从主类中设置一个值。我正在考虑将 master 设为一个抽象类,但没有必须重写的方法,但我想强调 master 类不一定独立存在的想法。另外,我想强调的是,主类的属性必须由子类设置。这里有什么合适的?谢谢你的帮助!

4

6 回答 6

2

如果没有人应该创建主类的实例,那么创建它绝对是合适的abstract

至于属性,使其成为抽象属性。在 master 中,编写如下内容:

public abstract int MyProperty { get; } 

然后子类必须覆盖它。

于 2011-03-11T23:07:49.253 回答
1

如果大师班确实不能有具体的实例,那么将其抽象是绝对可以的,而且确实是正确的。

于 2011-03-11T23:05:47.507 回答
1

抽象类是合适的。你可以让它有一个受保护的构造函数来获取你关心的属性,这样子类就必须提供它

于 2011-03-11T23:06:59.477 回答
1

将主类抽象化应该没问题——毕竟你永远不希望它在没有被继承的情况下被使用。

您还可以将属性声明为抽象的,以便必须在子类中覆盖它:

public abstract string MyProperty { get; set; }
于 2011-03-11T23:08:35.657 回答
1

我的主类包含几乎所有的功能,而子类只需要从主类中设置一个值。

这听起来更像是你应该在你的主类中公开一个静态工厂方法,它接受这个值并返回一个主类的实例。将主类的构造函数设为私有,这样只有您的静态工厂方法才能创建主类的实例。

像这样的东西:

public class MasterClass
{
    public string MyValue { get; set; }
    private MasterClass()
    {
    }

    public static MasterClass CreateMaster(string val)
    {
        MasterClass mc = new MasterClass() { MyValue = val };
        return mc;
    }
}
于 2011-03-11T23:08:43.767 回答
0

如果除了设置一些已经在“主”中的特定状态之外没有什么可扩展的,那么听起来您根本不需要继承,也许需要控制“主”类的实例是如何构造的。

您可以改为使用工厂模式。

但是,如果您正在改变行为,那么绝对abstract有必要使用!

于 2011-03-11T23:07:50.040 回答