相关疑难解决方法(0)

Liskov替代原则的例子是什么?

我听说Liskov替换原则(LSP)是面向对象设计的基本原则.它是什么以及它的使用例子是什么?

oop liskov-substitution-principle definition design-principles solid-principles

845
推荐指数
24
解决办法
29万
查看次数

列出<BusinessObject>或BusinessObjectCollection?

在C#泛型之前,每个人都会通过创建实现IEnumerable的集合库来为其业务对象编写集合

IE:

public class CollectionBase : IEnumerable
Run Code Online (Sandbox Code Playgroud)

然后从中派生出他们的Business Object集合.

public class BusinessObjectCollection : CollectionBase
Run Code Online (Sandbox Code Playgroud)

现在使用通用列表类,是否有人只使用它?我发现我使用了两种技术的妥协:

public class BusinessObjectCollection : List<BusinessObject>
Run Code Online (Sandbox Code Playgroud)

我这样做是因为我喜欢强类型名称而不是仅仅传递列表.

你的方法是什么?

.net c# generics collections class-design

45
推荐指数
3
解决办法
4341
查看次数

在引入Linq之后接受IEnumerable <T>作为参数是否安全?

类似的还有这与正确的输入和输出类型涉及几个问题是这样.我的问题更多的是正确的做法,方法命名,选择参数类型,事故等维护中的唤醒IEnumerable.

Linq几乎所有地方都处理,IEnumerable而这不是它,但它也引入了一些我们称之为延迟执行的异类.现在,当我们认为最好的想法是采用最基本的类型时,我们可能在设计我们的方法(特别是扩展方法)时出错了.所以我们的方法看起来像:

public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> lstObject)
{
    foreach (T t in lstObject)
       //some fisher-yates may be
}
Run Code Online (Sandbox Code Playgroud)

显而易见的危险是当我们将上述功能与懒惰混合Linq并且如此易受影响时.

var query = foos.Select(p => p).Where(p => p).OrderBy(p => p); //doesn't execute
//but
var query = foos.Select(p => p).Where(p => p).Shuffle().OrderBy(p => p);
//the second line executes up to a point.
Run Code Online (Sandbox Code Playgroud)

这是一个很大的编辑:

澄清上面这一行 - 我的问题不是关于第二个表达没有得到评估,严重不是.程序员都知道.我担心的是Shuffle到目前为止实际执行查询的方法.查看第一个查询,其中没有任何内容被执行.现在类似于构造另一个Linq表达式(应该稍后执行)时,我们的自定义函数正在播放spoilsport.换句话说,如何让调用者知道Shuffle并不是他们在Linq表达点上想要的那种功能.我希望这一点被带回家.道歉!:)虽然它就像去检查方法一样简单,但我问你们通常如何防御性地编程......

上面的例子可能没那么危险,但你明白了.这是某些(自定义)函数与Linq延迟执行的想法不相符.问题不仅在于性能,还在于意外的副作用. …

c# linq parameters ienumerable design-principles

6
推荐指数
1
解决办法
1207
查看次数