C#隐藏接口成员
考虑以下代码:C#隐藏接口成员,c#,.net,C#,.net,考虑以下代码: interface IA { string text {get;} } interface IB: IA { int number {get;} } class MyType: IB { {...} } 我真的不想在MyType中实现IA中的属性“text”。。有什么可能的把戏吗?例如,IB隐藏属性 谢谢是的,您可以通过如下方式显式实现它,使其成为伪私有: class MyType: IB { string IA.text { get { throw
interface IA
{
string text {get;}
}
interface IB: IA
{
int number {get;}
}
class MyType: IB
{
{...}
}
我真的不想在MyType中实现IA中的属性“text”。。有什么可能的把戏吗?例如,IB隐藏属性
谢谢是的,您可以通过如下方式显式实现它,使其成为伪私有:
class MyType: IB
{
string IA.text { get { throw new NotSupportedException(); } }
}
但是,真的吗?违反你自己的合同就像,嗯。。。违反了,伙计
我想,使用它玩得开心吧?是的,通过显式地实现它,您可以使它成为伪私有的:
class MyType: IB
{
string IA.text { get { throw new NotSupportedException(); } }
}
但是,真的吗?违反你自己的合同就像,嗯。。。违反了,伙计
我想,使用它玩得开心吧?如果你不希望它有有效的接口,为什么要用
IA
扩展IB
?接口是一个合同,没有办法绕过它。你需要的所有答案都已经提供了。基本上,您不能也不应该在不遵守合同的情况下实现类型。没有必要大喊大叫。这不是一个离谱的问题。IB
是否继承IA
可能不是他的选择IB
可能是第三方产品,甚至是BCL的一部分。他想要界面的一些行为,甚至是大部分行为,只是不是全部IList
只是BCL中的一个例子,接口并不总是完全实现的。也许这是界面的问题,但它就是它的本来面目。@Anthony,从一般意义上讲,这并不离谱,但从技术意义上讲,这是离谱的。如果IB
实现了IA
,并且MyType
实现了IB
,那么MyType
实现了IA
,这是一个必然的结论。除了实现user791928的答案之外,你完全无能为力。如果你不想让IA
拥有有效的接口,为什么你要用IB
扩展它呢?接口是一个契约,没有办法绕过它。你需要的所有答案都已经提供了。基本上,您不能也不应该在不遵守合同的情况下实现类型。没有必要大喊大叫。这不是一个离谱的问题。IB
是否继承IA
可能不是他的选择IB
可能是第三方产品,甚至是BCL的一部分。他想要界面的一些行为,甚至是大部分行为,只是不是全部IList
只是BCL中的一个例子,接口并不总是完全实现的。也许这是界面的问题,但它就是它的本来面目。@Anthony,从一般意义上讲,这并不离谱,但从技术意义上讲,这是离谱的。如果IB
实现了IA
,并且MyType
实现了IB
,那么MyType
实现了IA
,这是一个必然的结论。除了实现user791928的答案之外,你完全无能为力。如果你在上一条语句的末尾加上“、man”,我会给你一个+1。这就是实现属性。。实现只是抛出了一个异常。我不想在MyTypes中写任何与IA相关的东西这是正确的答案,但你永远不应该这样做的想法还不够强调,永远都不可能有一点强烈。安东尼·佩格拉姆:你知道吗,让纳波做这件事,让我们确保我们自己永远不会做这件事。这够稀罕吗?=)如果在上一条语句的末尾加上“,”man“,我会给你一个+1。这是在实现属性。。实现只是抛出了一个异常。我不想在MyTypes中写任何与IA相关的东西这是正确的答案,但你永远不应该这样做的想法还不够强调,永远都不可能有一点强烈。安东尼·佩格拉姆:你知道吗,让纳波做这件事,让我们确保我们自己永远不会做这件事。这够稀罕吗?=)