泛型类的价值?

时间:2010-11-04 02:24:35

标签: c# .net generics

除了像类集合这样的情况之外,我找不到泛型类的需要。堆栈和链表等项目。

我可以看到人们也在其他地方使用它。

使用泛型类我们获得了什么?

5 个答案:

答案 0 :(得分:1)

好吧,假设你有一个代表数据库表的类,你需要像Save()Delete()这样的方法 - 它们可以在任何数据库表实体上运行,而且无论类型如何,它们都可以运行以同样的方式(通用方式)。

所以要解决这个问题,你可以像这样使用泛型类:

public class BaseEntityModel<T> where T : IEntity2 // We use llblgen here
{
     // ... code

     // T is a generic type parameter which has to implement IEntity2.
     // But we don't care what type it is.
     public T Entity { get; set; }

     public void Save()
     {
           Entity.Save(); // Save is from IEntity2
     }

     // ... code
}

然后,对于Customer类,我们可以这样做

public class Customer : BaseEntityModel<CustomerEntity>
{
    public void Method()
    {
        // Entity is of type Customer entity
        Entity.CustomerName = "Bob";
        base.Save();
    }

}

然后一个用于公司

public class Company : BaseEntityModel<CompanyEntity>
{
     public void Method()
      {
        // Entity is of type Company entity
        Entity.CompanyName = "My Company";
        base.Save(); // Save is declared in the base class for a generic type (in this case company)
     }

}

这个代码示例也允许在不同类型的对象上使用相同的通用代码,并且可以约束到某些类型的对象(使用where T : IMyInterface

有更多方法来约束我可以使用的对象类型。此信息位于MSDN

答案 1 :(得分:1)

MSDN在Advantages and Limitations of Generics上有一篇非常全面的文章。基本上,当你使用泛型时,你减少了类型检查的麻烦,以确保类型安全,类型兼容性等。它们都是在编译时为你处理的。

他们可以帮助您避免代码重复 - 例如,您可以编写FooMethod(int arg),而不是编写FooMethod(string arg)FooMethod<T>(T arg)等,这样更清晰,更易于维护

另请注意,您可以使用where关键字添加constraints on generic type parameters。这有助于确保泛型类型参数实现某个接口,或者具有默认的无参数构造函数等。

答案 2 :(得分:1)

您获得代码重用 - 相同的源代码和逻辑,使用和操作不同的具体类型或类型组合进行实例化。的杠杆作用。

答案 3 :(得分:1)

泛型允许您实现类型安全的例程,这些例程适用于支持例程中执行的操作的任何类型。这样您就不必多次定义相同的类或函数来处理不同的类型,即使所有类型在源中的处理方式完全相同。

答案 4 :(得分:0)

你或多或少是对的:除了非常奇怪的地方,你主要在收藏中使用它们。但是你使用无处不在的集合,所以泛型是天赐之物。