Tag: oop

为什么通用ICollection在.NET 4.5中实现IReadOnlyCollection?

在.NET 4.5 / C#5中, IReadOnlyCollection<T>用Count属性声明: public interface IReadOnlyCollection<out T> : IEnumerable<T>, IEnumerable { int Count { get; } } 我想知道,对于ICollection<T>实现IReadOnlyCollection<T>接口是否有意义: public interface ICollection<T> : IEnumerable<T>, IEnumerable, *IReadOnlyCollection<T>* 这意味着实现ICollection<T>将自动实现IReadOnlyCollection<T> 。 这听起来对我来说很合理。 ICollection<T>抽象可以看作是IReadOnlyCollection<T>抽象的扩展。 请注意, List<T> ,例如,同时实现ICollection<T>和IReadOnlyCollection<T> 。 然而它并没有被devise成这样。 我在这里错过了什么? 为什么会select当前的实施呢? UPDATE 我正在寻找一个使用面向对象devise推理来解释原因的答案: 实现IReadOnlyCollection<T> 和 ICollection<T>具体类如List<T> ICollection<T> 是比以下更好的devise: ICollection<T> IReadOnlyCollection<T>直接实现IReadOnlyCollection<T> 还请注意,这基本上是一样的问题: 为什么IList<T>实现IReadOnlyList<T> ? 为什么不IDictionary<T>实现IReadOnlyDictionary<T> ?

我如何将Haskelltypes类转换为F#?

我试图将Haskell核心库的箭头翻译成F#(我认为这对于更好地理解箭头和F#是一个很好的练习,我可能可以在我正在进行的项目中使用它们)。但是,直接翻译由于范式的不同,是不可能的。 Haskell使用types类来expression这些东西,但是我不确定F#构造的最好用F#的习惯用法映射types类的function。 我有一些想法,但最好把它提出来,看看什么被认为是最接近的function。 对于人群:如何将types类(一个Haskell成语)翻译成F#惯用代码? 对于那些接受我长久解释的人来说: Haskell标准库中的代码就是我试图翻译的一个例子: class Category cat where id :: cat aa comp :: cat ab -> cat bc -> cat ac class Category a => Arrow a where arr :: (b -> c) -> abc first :: abc -> a (b,d) (c,d) instance Category (->) where id f = f instance Arrow […]

与面向对象devise有关的构成是什么?

我听到(并在这个网站上阅读)很多关于“偏爱构成而不是inheritance”。 但Compositon是什么? 我从人的angular度理解inheritance:哺乳动物:动物,但是我无法在任何地方真正看到“组合”的定义。有人可以填补我吗?

DDD是浪费时间吗?

谷歌search“DDD适合什么样的应用程序?” 给了我下面的答案: 所有软件应用程序的95%可能属于“不太适合使用DDD”类别。 (见文章 ) 那么,什么是大惊小怪? 我正在使用的应用程序主要是以数据为中心的,但仍然包含一些要应用的业务逻辑和规则。 开始使用DDD技术会浪费时间吗? 我最好使用更传统的数据访问层,POCO模型和业务逻辑层? 或者以不同的方式陈述 – 什么是DDD的替代scheme?

什么时候应该在deviseC#类库时通过接口selectinheritance?

我有一个Processor类,将做两个完全不同的事情,但从通用代码(“控制反转”情况)调用。 我想知道什么样的devise考虑因素,在决定它们是否应该全部从BaseProcessorinheritance,或者实现IP Processor作为接口时,我应该认识到(或认识到,对于你的USsers)。

理解封装和抽象的简单方法

学习面向对象的概念特别有兴趣深入理解抽象和封装。 已经检查了下面 抽象VS信息隐藏VS封装 抽象和封装之间的区别? 我发现很难用真正简单的示例类/代码段来理解这些概念。 我的一位同事说,抽象只不过是创build抽象类和保护其成员variables的普通类,其范围称为封装(Encapsulation)。 有一个简单的方法,我可以理解,并帮助他人了解到底是什么,而不是重复下面? 抽象和封装是相辅相成的概念:抽象的重点在于一个对象的可观察的行为…封装着重于引起这种行为的实现…封装通常是通过信息隐藏实现的,这是隐藏所有对其本质特征没有贡献的对象的秘密。

我应该先学习Perl 5 OO还是Moose?

我还是比较新的Perl编程,但我知道Perl 5 OO基本上是如何工作的。 不过,我从来没有用Perl 5 OO创build任何项目,所以我很肯定我会遇到很多陷阱。 最近我发现了关于Moose模块的宣传。 我查阅了CPAN上的一些文档,发现它非常有趣,帮助我成为开发者。 此外,它似乎非常稳定和可靠。 我是否应该更加努力地使用基本的Perl 5 OO语法,直到我对它非常熟悉(要知道阶段背后发生了什么),还是您认为我应该继续使用Moose直接开始开发应用程序? 还是应该给老鼠一个尝试? 任何想法和经验,在此表示赞赏。 提前致谢!

如何处理pylint消息:警告:方法可能是一个函数

我有一个python类,并运行pylint。 一条消息是: Warning: Method could be a function 这是否告诉我,将这个方法移出类是更好的,因为它不使用任何实例variables? 在C#中,我会使这个静态方法。 什么是最pythonic在这里做什么?

什么时候应该在OCaml中使用对象?

通常,一个OCaml程序可以写有或没有对象。 什么时候最有利于使用对象,什么时候应该避免?

为什么是sizeof(BaseClass)== sizeof(DerivedClass),尽pipe我添加了一个成员

从sizeof(Base) == 24和sizeof(Derived) == 24下面的代码。 为什么他们的大小相等? 在Base类中,我们有3个成员,在Derived类中,我们有另一个成员。 class Base { private: double d; protected: long l; public: int i; }; class Derived : public Base { private: float f; };