lsp

    5热度

    2回答

    比方说,我们有这个真是小巫见大巫类: class A { virtual int Function(int number) { return number; } } class B : A { override int Function(int number) { return number + 1; }

    1热度

    3回答

    我有一个模型抽象类,它声明了一个项目列表。摘要有两个抽象类。其中你可以添加新的项目到列表和一个根本不使用该列表,但除此之外的模型抽象类的其他行为。 我声明了两种方法来添加和删除列表中的项目。很显然,无论何时我想使用这些方法,我都需要将模型抽象与其子类一起施放。 在这种情况下,我可以违反LSP (Liskov substitution principle)吗?或者有解决这个问题的办法吗?

    13热度

    2回答

    我处于与Code Complete中提到的Steve McConnell's非常相似的情况。只有我的问题是基于车辆和三轮车碰巧在法律属于汽车类。到目前为止,汽车有四个车轮。任何方式我的域名是不必要的复杂,所以很容易坚持下面的猫的例子。 要怀疑重写常规做内 任何派生例行这通常表明在 基类设计中的错误类。例如,假设你有一个类Cat和一个例程Scratch(),并且假设你最终发现有一些 猫被声明并且不能

    7热度

    4回答

    我正在用C#编写一系列集合类,每个集合类都实现类似的自定义接口。是否可以为接口编写单个单元测试集合,并自动在几个不同的实现上运行它们?我想避免每个实现的任何重复的测试代码。 我愿意查看任何框架(NUnit等)或Visual Studio扩展来完成此操作。 对于那些希望做同样的,我贴我的具体的解决方案,基于断avandeursen's accepted solution,为an answer。

    1热度

    3回答

    我有这样的代码: abstract class Entity { // blah-blah-blah } abstract class BaseCollection { public void add(Entity entity); } 而且我从实体和BaseCollection类派生: class User extends Entity { } class U

    0热度

    1回答

    有些东西告诉我,我可能会被问及这个问题。提前对冗长的描述感到抱歉。 我正在研究一个Silverlight 4项目中的角落案例。基本上我正在构建的是一个自定义表单构建器。 表单可以有几个领域可能是不同类型(文本,整数,电子邮件等等)的。现在,所有这些类型都扩展了Field类,但在文本字段的情况下可能具有其他属性,例如长度。 我不得不从FieldViewModels集合在我FormFieldsMana

    2热度

    2回答

    我正在巩固我对Liskov Substitutional校长和开放关闭校长之间关系的理解。如果有人可以证实我的推论,并在下面回答我的问题,那很好。 我有以下类。如您所见,B源自A,它正在覆盖DisplayMessage函数以改变行为。 public class A { private readonly string _message; public A(string mes

    1热度

    1回答

    在我的GWT应用程序,我有一个类,像这样: public class AppActivityMapper implements ActivityMapper { @Override public Activity getActivity(Place place) { if(place instanceof ThisPlace) { return new Th

    4热度

    1回答

    其中一个recommended principles of object-oriented programming是Liskov substitution principle:子类的行为应与其基类相同(警告:实际上这不是Liskov原理的正确描述:请参阅PS)。 是否建议它也适用于构造函数?我主要考虑Python和它的__init__()方法,但这个问题适用于任何具有继承的面向对象语言。 我在问这

    0热度

    3回答

    如何建立一个域,当你有一个基类和2个类扩展这个基类并且只有一个派生类与另一个对象有关系时。 例子: public abstract class Base { public abstract void method(); } public class1 extends Base { public void method() { do some st