如何在 C# 中通过开放泛型类型实现多态性?
Jan 11, 2025 am 06:46 AMC#中使用开放泛型类型的多态性
在处理泛型代码时,通常会遇到需要操作各种类型数据的场景。但是,在处理开放泛型类型时,C#的泛型多态性存在局限性。
问题
考虑以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
在此示例中,您希望创建一个列表,该列表可以保存不同Data子类型的实例。但是,最后一行会因编译器错误而失败,因为开放泛型类型(例如Data)需要指定类型参数。
解决方法
C#不支持对开放泛型类型的真正多态性。为了克服这个问题,您可以选择以下几种方法:
-
创建对象列表:
1
2
3
4
List<object> dataCollection =
new
List<object>();
dataCollection.Add(
new
DecimalData());
dataCollection.Add(
new
StringData());
登录后复制但是,这种方法会丢失类型安全性,并且在访问数据时需要显式转换。
-
使用非泛型接口或抽象类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public
interface
IData
{
void SomeMethod();
}
public
abstract
class
Data<T> : IData
{
public
void SomeMethod()
{
}
}
List<IData> dataCollection =
new
List<IData>();
dataCollection.Add(
new
DecimalData());
dataCollection.Add(
new
StringData());
登录后复制这允许对列表元素进行非泛型操作,但会牺牲一些泛型性和类型安全性。
理解在C#中使用开放泛型类型的局限性和权衡非常重要,并选择最适合您特定需求的解决方案。
以上是如何在 C# 中通过开放泛型类型实现多态性?的详细内容。更多信息请关注PHP中文网其他相关文章!

热门文章

热门文章

热门文章标签

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)