3 回答
TA贡献1827条经验 获得超8个赞
在接口中,您不能限制对属性的访问,因此我认为您不能强制实现该接口的类来限制该访问。
或者你可以使用一个抽象类,你可以在其中限制访问,但一个不太仁慈的实现者仍然可以轻松地覆盖抽象类的限制访问属性。
interface IMyClass
{
string MyProperty { get; } // this does nothing against implementing a setter!
}
abstract class MyAbstracClass : IMyClass
{
string MyProperty { get; protected set; } // otherwise we cannot set it from inheritors
}
class MyClass : MyAbstractClass
{
public new string MyProperty { get; set; } // nothing stops this!
public MyClass (string prop) => MyProperty = prop;
}
抽象类选项确实意味着开发人员不能“意外地”公开该属性。即使您设法将其隐藏起来,任何真正想要访问私有属性的开发人员都可以简单地使用反射。不过,这也不是偶然发生的,并且应该始终在代码审查时发出危险信号!
TA贡献1712条经验 获得超3个赞
public class Implementer : Enforcer
{
private readonly string _propy;
public string Propy
{
get => _propy;
set => throw new InvalidOperationException();
}
public Implementer(string propy) { _propy = propy; }
}
设置时抛出异常,或者您可以更改接口以仅在实现中获取和执行私有集
TA贡献1826条经验 获得超6个赞
public class Implementer : Enforcer
{
private string _propy;
public string Propy
{
get
{
return _propy;
}
set
{
// do nothing. so readonly.
}
}
public Implementer(string propy) { _propy = propy; }
}
- 3 回答
- 0 关注
- 95 浏览
添加回答
举报