解决方法强制实现接口属性上的私有访问修饰符

Mos*_*aou 1 c# properties interface

我有和接口如下:

public interface IData
{
    String Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

还有2个实现它的类:

public class Data1 : IData
{
    public String Name { get; set; }
}

public class Data2 : IData
{
    public String Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我需要阻止获取Data2实例的名称.编译器不允许以下所有形式:

internal String Name { get; set; }
private String Name { get; set; }
public String Name { private get; set; }
Run Code Online (Sandbox Code Playgroud)

我确实理解为什么这不明确可能的逻辑原因.将使用接口访问属性,该接口没有任何关于已实现的访问修饰符的线索,如果找不到它将失败.

我的用例是两个Data1Data2实例都应该能够使用使用IData参数的方法(一些不Name存在使用的方法),但是Data2敏感且不应该直接访问.因此,我正在寻找一种解决方法.

Jar*_*Par 5

听起来您希望Name通过实例访问Data2不被允许.如果是这种情况,那么使用显式接口实现

public class Data2 : IData {
  String IData.Name { 
    get { ... } 
    set { ... } 
  }
}
Run Code Online (Sandbox Code Playgroud)

现在Name只有在Data2查看实例时才能访问IData

Data2 obj = new Data2();
string name = obj.Name; // Error!
IData other = obj;
name = other.Name;  // Ok
Run Code Online (Sandbox Code Playgroud)