我目前在试图掌握C#的过程,所以我读通过C#自适应编码由加里·麦克莱恩大厅。
他撰写有关模式和反模式的文章。在实现与接口部分中,他写道:
不熟悉接口编程概念的开发人员通常很难放开接口背后的内容。
在编译时,接口的任何客户端都不应该知道接口正在使用哪种接口实现。这些知识可能导致错误的假设,从而使客户端耦合到接口的特定实现。
想象一下一个常见的示例,其中一个类需要在持久性存储中保存一条记录。为此,它正确地委托给一个接口,该接口隐藏了所使用的持久性存储机制的详细信息。但是,对运行时使用接口的哪个实现进行任何假设都是不正确的。例如,将接口引用强制转换为任何实现都是一个坏主意。
这可能是语言障碍,或者是我缺乏经验,但是我不太明白这意味着什么。这是我的理解:
我有一个免费的有趣的项目来练习C#。我在那里上课:
public class SomeClass...
此类在很多地方都使用过。在学习C#时,我读到最好使用接口抽象,因此我做了以下工作
public interface ISomeClass <- Here I made a "contract" of all the public methods and properties SomeClass needs to have.
public class SomeClass : ISomeClass <- Same as before. All implementation here.
因此,我进入了所有一些类引用,并用ISomeClass替换了它们。
除了在构造中,我写过:
ISomeClass myClass = new SomeClass();
我是否正确理解这是错误的?如果是,为什么这样做,我应该怎么做呢?
ISomeClass myClass = new SomeClass();
?”如果您真的是那个意思,那是构造函数中的递归,可能不是您想要的。希望您指的是“构造”,即分配,但不是构造函数本身,对吧。 ?
ISomeClass
),但是制作太通用的接口也很容易,因此无法针对此编写有用的代码,这是唯一的选择是重新考虑界面并重写代码或向下转换。