gpt4 book ai didi

c# - 是否需要在派生类的定义中指定基类实现的接口(interface)?

转载 作者:行者123 更新时间:2023-11-30 20:18:11 27 4
gpt4 key购买 nike

在 C# 中,假设类 C1 实现接口(interface) I1,类 C2 派生自 C1。

  1. 一般来说,在C2的定义中,是否需要声明C2 实现了 I1?
  2. 同样的问题,如果在C1的声明中,I1有一个类型参数,并且 C1 和 C2 的类型参数不同?

    例如,

    public abstract class C1: I1<C1>

    public class C2: C1, I1<C2>

    C2的定义里需要写I1吗?

谢谢。

最佳答案

  1. 没有。如果一个接口(interface)在基类中实现,派生类也会实现它们,而无需再次显式声明。
  2. 必须显式声明用于不同通用参数的通用接口(interface)。原因是例如一个IEnumerable<int>是一个完全不同于IEnumerable<string>的类型这很可能需要派生类使用与基类不同的签名来实现方法。

例子:

public interface IGenericInterface<T> 
{
T GetSomething();
void DoSomething(T arg);
}

public class BaseClass : IGenericInterface<int>
{
public virtual int GetSomething() { return 5; }
public virtual void DoSomething(int arg) { Console.WriteLine(arg); }
}

public class Derived : BaseClass, IGenericInterface<string>
{
string IGenericInterface<string>.GetSomething() { return "hello world!"; }
public void DoSomething(string arg) { Console.WriteLine(arg); }
}

请注意,在此示例中 Derived.GetSomething()需要是 implemented explicitly , 因为否则它会与基类冲突' int版本。不允许具有相同名称的方法其返回类型不同。

关于c# - 是否需要在派生类的定义中指定基类实现的接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42005615/

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