具有继承嵌套类的MVC模型

时间:2014-12-24 16:56:56

标签: c# asp.net-mvc inheritance model-view-controller interface

想要实现一个像这样的MVC模型,但是一个人类有一个Telecoms类,可以是一个电话线或一个PhonelineAndBroadband类,我可以轻松地访问ITelecom Price()方法列表。这是接近这个的最佳方式吗?什么会在Person类中发生什么?

class Person
{

}

abstract class Telecoms
{

}

interface ITelecoms
{
    void Price();
}

class Phoneline : Telecoms, ITelecoms
{
    public void Price() {...}    
}

class PhonelineAndBroadband : Telecoms, ITelecoms
{
    public void Price() {...}    
}

2 个答案:

答案 0 :(得分:0)

Person类应具有ITelecoms类型的属性。

public class Persons
{
    public ITelecoms Telecom {get;set;}
}

Person p1 = new Person {Telecom = new Phoneline()};
Person p2 = new Person {Telecom = new PhonelineAndBroadband()};

List<Person> persons = new List<Person>{p1, p2};

persons.ForEach(r=> r.Telecom.Price());

答案 1 :(得分:0)

我建议只使用抽象类。哪个是你的基类。它将包含一个包含Price()方法的抽象方法。然后,您可以摆脱多态,这是面向对象编程的基础之一,以便将此方法实现到子类中。 因此,消除接口,因为Price()将在Base抽象类中访问,而不是通过添加ITelecoms接口来提高设计的复杂性。

abstract class Telecoms
{
    public abstract void Price();
}

然后为您的子类

class Phoneline : Telecoms
{
    public override void Price() {...}    
}

class PhonelineAndBroadband : Telecoms
{
    public override void Price() {...}    
}

使用这样的代码,您将拥有一个干净,紧凑,OO尊重的设计。