gpt4 book ai didi

C#:接口(interface)继承getters/setters

转载 作者:IT王子 更新时间:2023-10-29 04:12:59 25 4
gpt4 key购买 nike

我有一组与特定可变对象紧密结合使用的接口(interface)。

对象的许多用户只需要能够从对象中读取值,然后只需要几个属性。为了避免命名空间污染(更容易的智能感知)并理解使用意图,我想要一个小的基本接口(interface),它只以只读方式公开一些“关键”属性。

但是,几乎所有实现都将支持完整的接口(interface),包括可修改性。

不幸的是,我在用 C# 表达该概念时遇到了障碍:

interface IBasicProps {
public int Priority { get; }
public string Name {get;}
//... whatever
}

interface IBasicPropsWriteable:IBasicProps {
public int Priority { set; } //warning CS0108: [...] hides inherited member [...]
public string Name { set; }
//... whatever
}

我当然不是有意隐藏任何成员,所以这不好!

当然,我可以使用方法很好地解决这个问题,但是正确的选择是什么?我想保持“核心”接口(interface)尽可能小,即使拆分接口(interface)除了传达意图之外没有任何其他目的。使用拆分接口(interface),很明显哪些方法不会进行任何更新,并且它使编写代码更加清晰(更不用说还允许 nice-n-simple 静态单例 stub ,足以满足很多简单的情况) .

我想避免任何抽象类之类的东西;它们使重新实现或快速的单一用途垫片变得更加复杂和难以理解。

那么,有想法吗?

最佳答案

隐藏在界面中的方法并没有那么蹩脚;我会选择类似的东西:

interface IBasicProps {
int Priority { get; }
string Name {get;}
//... whatever
}

interface IBasicPropsWriteable:IBasicProps {
new int Priority { get; set; }
new string Name { get; set; }
//... whatever
}
class Foo : IBasicPropsWriteable {
public int Priority {get;set;}
public string Name {get;set;}
/* optional
int IBasicProps.Priority {get {return Priority;}}
string IBasicProps.Name {get {return Name;}}
*/
}

关于C#:接口(interface)继承getters/setters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1791359/

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