首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >泛型类型与抽象类/接口

泛型类型与抽象类/接口
EN

Stack Overflow用户
提问于 2009-07-08 09:00:45
回答 2查看 7.6K关注 0票数 7

假设我们在.NET中创建一个泛型控件,例如树。我不明白为什么人们要使用这个泛型类型定义

代码语言:javascript
复制
Control<T>

在面向对象编程中,我可以使用抽象类或接口:

代码语言:javascript
复制
Control<IItem> or Control<BaseClass>

因此,唯一要做的是,它们的类型必须从基类派生或实现接口。这是不是意味着泛型类型更方便,因为你我不需要实现或继承任何东西?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-07-08 09:19:55

我觉得你有点糊涂了。泛型类型和抽象类/接口为应用程序设计中的不同方法提供不同的目标。抽象类/接口用于一组实体的通用功能的泛化。稍后,此API可能会以不同的方式实现,但由于涉及到多态性,因此不会影响任何人。

另一方面,有时你有一个非常相似的实现,唯一的区别是你正在使用的对象的类型。在这里,你需要一个泛型。您可以使用多态性,但没有必要。为此,只需定义一个接口,进行一个实现,并让最终用户决定使用哪种对象,就会清楚得多。

最好的例子是List,list的主要用途是存储元素。list实现者不应该关心您将使用哪种类型的对象,因此稍后您将能够只定义List并使用整数List。

票数 19
EN

Stack Overflow用户

发布于 2009-07-08 09:12:20

因为在树控件的情况下,定义一个通用的tree控件将意味着Tree项可以是任何类型(您也可以添加某些约束)。

在实例化控件时,当然必须声明项类型(就像第二个使用IItemBaseClass的代码示例一样)。

如果Tree控件不是泛型类型,则必须为每个item类型创建多个控件。

为什么不直接使用接口/抽象基类型?

如果你只是使用一个接口/抽象作为你的项目的具体类,你会受到它的定义的约束。你只能看到它的属性和方法。使用泛型树控件和任何item类型,您仍然能够访问item的所有属性和方法,而不管它的接口实现或父类继承。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1096959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档