C#泛型铸造

时间:2010-03-26 06:58:30

标签: c# .net generics

4 个答案:

答案 0 :(得分:4)

为什么不那样? (如果你有权访问T,那么在StoreDataTestHelper中创建一个bla实例没有多大意义)

 public void StoreDataTestHelper<T>() where T : BaseStoreItem, new()
 {
     FileStore<T> target = new FileStore<T>(); 

     T data = new T();

     target.StoreData(data);
 }

答案 1 :(得分:1)

  

当T为“bla”类型时

您的上述条件仅适用于当前案例,但我可以创建另一个类

public class Bla2: BaseStoreItem {...

然后Bla2&lt;&gt; bla ...,Bla2都不是来自bla,所以如果我尝试使用

StoreDataTestHelper<Bla2>(); 

这是错误的,编译器足够聪明,可以理解在这种情况下它不起作用,计算机语言不像英语,它们被创建为在所有条件下完全相同。它们的设计使得语言规则在所有情况下都是正确的。如果它们不同,您将发现混乱,找出错误的位置。

答案 2 :(得分:0)

答案 3 :(得分:0)

相关问题