3 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
在接口中,您不能限制對(duì)屬性的訪問(wèn),因此我認(rèn)為您不能強(qiáng)制實(shí)現(xiàn)該接口的類來(lái)限制該訪問(wèn)。
或者你可以使用一個(gè)抽象類,你可以在其中限制訪問(wèn),但一個(gè)不太仁慈的實(shí)現(xiàn)者仍然可以輕松地覆蓋抽象類的限制訪問(wèn)屬性。
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;
}
抽象類選項(xiàng)確實(shí)意味著開(kāi)發(fā)人員不能“意外地”公開(kāi)該屬性。即使您設(shè)法將其隱藏起來(lái),任何真正想要訪問(wèn)私有屬性的開(kāi)發(fā)人員都可以簡(jiǎn)單地使用反射。不過(guò),這也不是偶然發(fā)生的,并且應(yīng)該始終在代碼審查時(shí)發(fā)出危險(xiǎn)信號(hào)!

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊
public class Implementer : Enforcer
{
private readonly string _propy;
public string Propy
{
get => _propy;
set => throw new InvalidOperationException();
}
public Implementer(string propy) { _propy = propy; }
}
設(shè)置時(shí)拋出異常,或者您可以更改接口以僅在實(shí)現(xiàn)中獲取和執(zhí)行私有集

TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個(gè)贊
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 關(guān)注
- 127 瀏覽
添加回答
舉報(bào)