具有通用参数和抽象类的generics
我有两个通用的基类。 第二个generics类对其第一个类的参数有约束。
abstract class FirstClass {...} abstract class SecondClass where U : FirstClass {...}
这不起作用,因为没有定义FirstClass。 所以我需要这样做。
abstract class FirstClass {...} abstract class SecondClass where U : FirstClass {...}
哪个有效。 但是,这使得实现这些抽象类很难看。
class SomeClass {...} class MyFirstClass : FirstClass {...} class MySecondClass : SecondClass {...}
这对我来说似乎是多余的,因为我正在指定SomeClass两次。 有没有办法以这样的方式声明它,即FirstClass中的T自动为SecondClass的U. 我真的希望看起来像这样。
class SomeClass {...} class MyFirstClass : FirstClass {...} class MySecondClass : SecondClass {...}
虽然我怀疑这种确切的情况是可能的,但是有什么更清洁我要做的事情呢?
编辑
有几个人建议制作一个IFirstClass接口。 但我的定义更接近于此。
class FirstClass { public T MyObj { get; set; } } class SecondClass where U : FirstClass { U MyFirstClass { get; set; } }
使用接口,我无法从SecondClass访问MyFirstClass.MyObj。 虽然我可以创建一个object T MyObj { get; set; }
object T MyObj { get; set; }
在IFirstClass上,然后使用new
来隐藏它,如果我这样做,silverlight会在绑定中抛出一个契合。
如果你实际上正在使用FirstClass
的generics类型参数(因为,从你的编辑,它听起来像你),那么不,你要找的是不可能的。 编译器不区分相关的类型参数和不相关的类型参数。
根据我的经验,最简单的方法是创建generics类的非generics接口。 当您需要在不知道generics类型的情况下转换为基类时,它也解决了这个问题。
interface IFirstClass {...} abstract class FirstClass : IFirstClass {...} abstract class SecondClass where T : IFirstClass {...}
创建FirstClass实现的接口。 然后,您可以将SecondClass约束到接口。