我有两个通用基类。第二个通用类在其第一个类的参数上具有约束条件。
我怀疑这种情况不太可能发生,有没有更简洁的方法来达到我想要做的事情?
编辑
有几个人建议创建一个 IFirstClass 接口。但我的定义更接近这样。
abstract class FirstClass<T> {...}
abstract class SecondClass<U> where U : FirstClass {...}
这是无法正常工作的,因为 FirstClass 没有被定义。因此我需要这样做。
abstract class FirstClass<T> {...}
abstract class SecondClass<U, T> where U : FirstClass<T> {...}
这种方法可以实现功能。但是,这样会使得实现这些抽象类变得丑陋。
class SomeClass {...}
class MyFirstClass : FirstClass<SomeClass> {...}
class MySecondClass : SecondClass<MyFirstClass, SomeClass> {...}
我觉得这种写法有些冗余,因为我重复了两次SomeClass。有没有一种方法可以声明它,使得FirstClass中的T自动成为SecondClass中的U。我真正想要的代码是这样的。
class SomeClass {...}
class MyFirstClass : FirstClass<SomeClass> {...}
class MySecondClass : SecondClass<MyFirstClass> {...}
我怀疑这种情况不太可能发生,有没有更简洁的方法来达到我想要做的事情?
编辑
有几个人建议创建一个 IFirstClass 接口。但我的定义更接近这样。
class FirstClass<T>
{
public T MyObj { get; set; }
}
class SecondClass<U, T> where U : FirstClass<T>
{
U MyFirstClass { get; set; }
}
我无法从SecondClass访问MyFirstClass.MyObj的接口。虽然我可以在IFirstClass上创建一个object T MyObj { get; set; }
,然后使用new
来隐藏它,但如果我这样做,Silverlight在绑定时会出现问题。
U
和T
是不同的类型吗? - Stefan Steinegger