gpt4 book ai didi

c# - 在 C# 的接口(interface)内使用 'new' 关键字意味着什么?

转载 作者:IT王子 更新时间:2023-10-29 04:22:26 27 4
gpt4 key购买 nike

开发通用接口(interface) 我希望在接口(interface)中声明一个构造函数,但它说那里禁止构造函数。我当时试图声明一个静态工厂方法,但它说不允许静态方法并建议使用“new”关键字。但我几乎不知道在 C# 的接口(interface)内使用“new”关键字究竟意味着什么。你有吗?

更新:

我没有发布任何示例代码,因为我不想混淆 2 个问题——如何在接口(interface)中指定构造函数/工厂以及“new”关键字在接口(interface)中的含义。我什至被迫指定第一部分,因为 StackOverflow 不接受纯形式的第二个问题,说它不符合质量标准。

但是,根据您的要求,我将对我试图实现的目标进行抽样:

Interface IMyInterface <T, U, V>
{
IMyInterface (T, U, U);
// OR
static IMyInterface GetNewIMyInterface (T, U, U);
}

我只是希望每个派生类都实现这样一个构造函数。

最佳答案

Bala 的回答是正确的,但了解为什么您要这样做可能会有所帮助。考虑 BCL 设计人员在为 CLR 版本 2 设计库时所面临的问题。有一个现有接口(interface):

interface IEnumerable
{
IEnumerator GetEnumerator();
}

现在你要添加:

interface IEnumerable<T> : IEnumerable
{
new IEnumerator<T> GetEnumerator();
}

新接口(interface)与旧接口(interface)的区别仅在于返回类型。

你有什么选择?

1) 将新的 GetEnumerator 标记为"new",以便编译器知道这是新方法,不会与同名但返回类型不同的旧方法发生冲突。

2) 将名称更改为 GetEnumerator2。

3) 不要继承原来的IEnumerable。

选项 2 和 3 很糟糕。选项 1 很棒:新枚举与期望旧枚举的代码无缝协作,但使用新枚举编写的代码默认获得"new"通用行为。

关于c# - 在 C# 的接口(interface)内使用 'new' 关键字意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6583104/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com