除了像类集合这样的情况之外,我找不到泛型类的需要。堆栈和链表等项目。
我可以看到人们也在其他地方使用它。
使用泛型类我们获得了什么?
答案 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)
你或多或少是对的:除了非常奇怪的地方,你主要在收藏中使用它们。但是你使用无处不在的集合,所以泛型是天赐之物。