假如我有一個類庫 Lib,提供一個類 ClassA 對外服務,ClassA 中有若干只讀屬性 PropA, PropB 等等,外部調用者無法對 ClassA 中的 PropA 和 PropB 進行寫操作,於是我可以這樣定義: 復制代碼 namespace Lib { public class ClassA { public string PropA { get; private set; } public string PropB { get; private set; } } } 復制代碼 但是我在 Lib 庫中的 ClassB 需要對 ClassA 中的 PropA 屬性進行寫操作,怎麼辦?如果開放 ClassA 的 set 為 public 會破壞邏輯。我的做法是定義一個接口 IMemberSetter 負責對成員進行寫入。 復制代碼 namespace Lib { interface IMemberSetter { void SetMember(string member, object value); } } 復制代碼 然後在 ClassA 中實現該接口,並修改代碼如下: 復制代碼 namespace Lib { public class ClassA : IMemberSetter { private string propA; private string propB; public string PropA { get { return propA; } } public string PropB { get {return propB; } } void IMemberSetter.SetMember(string member, object value) { switch(member) { case "PropA": this.propA = (string)value; break; case "PropB": this.propB = (string)value; break; } } } } 復制代碼 當 ClassB 想要修改 ClassA 中的某個屬性時,只要將 ClassA 轉換為 IMemberSetter 接口訪問,然後調用 SetMember 方法即可。 這個思路希望能夠得到大家拍磚,因為如果可行的話我會將它融入下一個項目當中。