正确使用抽象类

时间:2011-03-11 23:02:22

标签: c# inheritance abstract ooad

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

6 个答案:

答案 0 :(得分:2)

如果没有人应该创建一个主类的实例,那么将其设为abstract是绝对合适的。

对于属性,将其设为抽象属性。在主人中,写下如下:

public abstract int MyProperty { get; } 

然后子类必须覆盖它。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

将master类设计为抽象应该没问题 - 毕竟你不希望它被使用而不会被继承。

您还可以将属性声明为抽象属性,以便必须在子类中重写:

public abstract string MyProperty { get; set; }

答案 4 :(得分:1)

  

我的大师班几乎包含所有   功能和子类   只需要设置一个值   主

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

这样的事情:

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

    public static MasterClass CreateMaster(string val)
    {
        MasterClass mc = new MasterClass() { MyValue = val };
        return mc;
    }
}

答案 5 :(得分:0)

如果没有任何内容可以扩展,除了设置已经在“master”中的某个特定状态,那么听起来你根本不需要继承,也许需要控制你的“master”类的实例建造。

您可以使用工厂模式来查看。

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