gpt4 book ai didi

c# - 不隐藏的接口(interface)继承

转载 作者:太空狗 更新时间:2023-10-30 00:21:54 25 4
gpt4 key购买 nike

如果我写class,就ok

class C
{
protected int _attr;
int attr { get { return _attr; } }
}

class CWithSet : C
{
int attr { set { _attr = value; } }
}

但是,如果我写接口(interface)

interface I
{
int attr { get; }
}

interface IWithSet : I
{
int attr { set; }
}

然后我有警告:“‘IWithSet.attr’隐藏了继承的成员‘I.attr’。如果有意隐藏,请使用 new 关键字。”

怎么写,才不会被warning?

最佳答案

来自 C# 规范:接口(interface)的继承成员明确地不属于接口(interface)声明空间的一部分。因此,允许接口(interface)声明与继承成员具有相同名称或签名的成员。发生这种情况时,派生接口(interface)成员被称为隐藏基接口(interface)成员。隐藏继承成员不被视为错误,但它确实会导致编译器发出警告。要抑制警告,派生接口(interface)成员的声明必须包含一个 new 修饰符以指示派生成员旨在隐藏基成员。 ( Interface members ) 正确的实现是:

interface IWithSet : I
{
new int attr { get; set; }
}

关于c# - 不隐藏的接口(interface)继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3365067/

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