想要实现一个像这样的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() {...}
}
答案 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尊重的设计。