Dan*_* L. 2 .net c# oop generics
我试图在实现彼此属于的对象之间建立类型层次结构.语法变得多余,让我相信我要么滥用泛型,要么有更聪明的方法来表示接口之间的这种关系.
让我给你举个例子:
interface Interface
{ }
interface Class<I>
where I : Interface
{ }
interface Method<I, C>
where I : Interface
where C : Class<I>
{ }
interface Parameter<I, C, M>
where I : Interface
where C : Class<I>
where M : Method<I, C>
{ }
Run Code Online (Sandbox Code Playgroud)
}
这个层次结构的根是Interface.然后,我们有一个Class可能只来自特定的Interface.
在Method必须属于一个具体实施的Class.
Parameter可能只能通过特定Method实现来实现.
有没有更好的方法来解决这个问题?我在C#generics语法方面有点生疏,因为我过去一年一直在C和Go游泳.
听起来您正试图在类型系统中捕获业务域的业务规则 - 接口和类以及方法和参数.
我建议你不要试着这样做.它往往会导致痛苦,因为类型系统的规则不一定完全映射到业务域的规则.
特别是:业务领域通常有许多形式的规则"X是一种限制做Z的Y",并且很难在使用Liskov替换原则的类型系统中表示:如果是Y是一种X,X可以做Z,那么Y可以在需要Z-doer的上下文中使用.
泛型旨在解决容器,比较器,monadic类型(如可空,序列,未来,懒惰等)和其他简单类型结构的问题.我的经验法则:如果你不能在你的描述中使用"of"这个词,或者做一个很容易的形容词,那就不要使用泛型."一碗苹果,一碗橘子,好吧,听起来像碗是通用的.数字的顺序,名字的顺序,肯定.可以约会的日期,懒惰的字符串." 所有这些都很好,很容易.接口类?不太清楚.
更多想法:
https://ericlippert.com/2015/04/27/wizards-and-warriors-part-one/
| 归档时间: |
|
| 查看次数: |
173 次 |
| 最近记录: |