gpt4 book ai didi

c# - 标记为过时的接口(interface)方法在实现时不会从编译器发出消息

转载 作者:太空狗 更新时间:2023-10-29 22:04:28 25 4
gpt4 key购买 nike

考虑这个例子

    public interface IAnimal
{
[Obsolete("Animals can't eat anymore", true)]
void Eat();
}

public class Animal : IAnimal
{
public void Eat()
{
Console.WriteLine("Hello");
}
}

我有一个带有过时方法的接口(interface) IAnimal。Animal 类实现了该接口(interface)。

稍后,我这样调用 Eat 方法:

var animal = new Animal();
animal.Eat();

编译器不会编译失败(我将 Obsolete 标记为给出错误而不是警告)。程序编译和调用方法也没有错误。

据我所知,这是编译器的一个错误。我错过了什么吗?

注意:我使用的是VS2010

最佳答案

您只将 IAnimal.Eat 标记为过时,而不是将 Animal.Eat 标记为过时。 var 关键字解析为 Animal,因此当您调用 animal.Eat 时,您不会调用任何标记为已过时的方法。

要解决此问题,请将 var 显式更改为 IAnimal,或者更好的是,将 Animal.Eat 也标记为已过时:

    public interface IAnimal
{
[Obsolete("Animals can't eat anymore", true)]
void Eat();
}

public class Animal : IAnimal
{
[Obsolete("Animals can't eat anymore", true)]
public void Eat()
{
Console.WriteLine("Hello");
}
}

关于c# - 标记为过时的接口(interface)方法在实现时不会从编译器发出消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15560445/

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