您可以使用C#new关键字来扩展接口的属性吗?

前端之家收集整理的这篇文章主要介绍了您可以使用C#new关键字来扩展接口的属性吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我理解“new”关键字如何隐藏派生类中的方法.但是,它对实现使用关键字的接口的类有什么影响?

考虑这个例子,我决定通过使其属性读/写来扩展接口.

public interface IReadOnly {

   string Id {
      get;
   }
}

public interface ICanReadAndWrite : IReadOnly  {

   new string Id {
      get;
      set;
   }
}

然后你就可以做到这样的事情:

public IReadOnly SomeMethod() {
   // return an instance of ICanReadAndWrite
}

这是不好的设计吗?它会导致我的类实现ICanReadAndWrite的问题吗?

编辑:这是一个人为的例子,说明我为什么要这样做:

假设我有一个返回IShoppingCartItemReadWrite的工厂类.然后,我可以有一个服务层来操作它的价格,更改东西等.然后,我可以将这些对象作为IShoppingCartItemReadOnly传递给某种不会改变它们的表示层. (是的,我知道它在技术上可以改变它们 – 这是一个设计问题,而不是安全性等)

解决方法

这不是一个特别糟糕的主意.您应该知道实现者可以(如果它隐式实现接口,那么单个读/写属性可以满足两个接口)提供两个不同的实现:
class Test : ICanReadAndWrite {
   public string Id {
      get { return "100"; }
      set { }
   }
   string IReadOnly.Id {
      get { return "10"; }
   }
}

Test t = new Test();
Console.WriteLine(t.Id);  // prints 100
Console.WriteLine(((IReadOnly)t).Id); // prints 10

顺便说一下,一般来说,新的继承修饰符除了告诉编译器关闭并且不抛弃“你隐藏该成员”警告之外什么都不做.省略它将对编译的代码没有影响.

猜你在找的C&C++相关文章