相关疑难解决方法(0)

为什么C#中的基类允许实现接口契约而不继承它?

我偶然发现了C#的这个"特性" - 实现接口方法的基类不必从它派生.

例:

public interface IContract
{
    void Func();
}

// Note that Base does **not** derive from IContract
public abstract class Base
{
    public void Func()
    {
        Console.WriteLine("Base.Func");
    }
}

// Note that Derived does *not* provide implementation for IContract
public class Derived : Base, IContract
{
}
Run Code Online (Sandbox Code Playgroud)

会发生什么事情,Derived神奇地采用公共方法Base.Func,并决定它将实施IContract.Func.

这魔术背后的原因是什么?

恕我直言:这种"准实现"功能非常不直观,使代码检查更加困难.你怎么看?

c# interface base-class

18
推荐指数
2
解决办法
3638
查看次数

实现子类中的接口的基类

using System;


public interface MustImplement
{
    public void DoSomething();
}

public class Base
{
    public void DoSomething()
    {
        Console.WriteLine("Something must be done");
    }
}

public class Child: Base, MustImplement
{
    //I don't have to implement the MustImplement interface here since the base class did it.
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,子类仅使用DoSomething()基类中的实现,并且编译器将其视为有效。

我看到有人在他们的代码中做了类似的事情,这就是为什么我创建一个代码片段只是为了传达这个想法。

有什么理由我们应该这样做而不是在基类中执行public class Base: MustImplement和实现?public virtual void DoSomething()

.net c#

0
推荐指数
1
解决办法
82
查看次数

标签 统计

c# ×2

.net ×1

base-class ×1

interface ×1