假设我们在.NET中创建一个泛型控件,例如树。我不明白为什么人们要使用这个泛型类型定义
Control<T>在面向对象编程中,我可以使用抽象类或接口:
Control<IItem> or Control<BaseClass>因此,唯一要做的是,它们的类型必须从基类派生或实现接口。这是不是意味着泛型类型更方便,因为你我不需要实现或继承任何东西?
发布于 2009-07-08 09:19:55
我觉得你有点糊涂了。泛型类型和抽象类/接口为应用程序设计中的不同方法提供不同的目标。抽象类/接口用于一组实体的通用功能的泛化。稍后,此API可能会以不同的方式实现,但由于涉及到多态性,因此不会影响任何人。
另一方面,有时你有一个非常相似的实现,唯一的区别是你正在使用的对象的类型。在这里,你需要一个泛型。您可以使用多态性,但没有必要。为此,只需定义一个接口,进行一个实现,并让最终用户决定使用哪种对象,就会清楚得多。
最好的例子是List,list的主要用途是存储元素。list实现者不应该关心您将使用哪种类型的对象,因此稍后您将能够只定义List并使用整数List。
发布于 2009-07-08 09:12:20
因为在树控件的情况下,定义一个通用的tree控件将意味着Tree项可以是任何类型(您也可以添加某些约束)。
在实例化控件时,当然必须声明项类型(就像第二个使用IItem和BaseClass的代码示例一样)。
如果Tree控件不是泛型类型,则必须为每个item类型创建多个控件。
为什么不直接使用接口/抽象基类型?
如果你只是使用一个接口/抽象作为你的项目的具体类,你会受到它的定义的约束。你只能看到它的属性和方法。使用泛型树控件和任何item类型,您仍然能够访问item的所有属性和方法,而不管它的接口实现或父类继承。
https://stackoverflow.com/questions/1096959
复制相似问题