限制对特定对象的公共setter访问(C#)
我正在尝试创建一个类(在C#中)作为我的应用程序的环境。
我正在尝试使类动态化,并将其作为参数发送到我的应用程序中的实体。 问题是,我希望能够更改此环境类(公共setter)的属性,但同时我希望接收环境的类无法使用这些setter。
我似乎无法找到一个很好的方式来表达我的问题(我认为这是我在谷歌或msdn上找不到这样的原因的一部分),但是很快, 我想创建一个类, setter只对我的某些对象公开,而不是对所有对象都公开 。
我目前正在尝试以下想法:避免公共设置器一起使用,并使用事件注册公开私有字段。
该类将在新的第三个对象中注册事件(作为参数发送到构造函数)。 将由环境注册的方法不仅仅是setter,因此触发这些事件将“允许访问”私有字段。
我喜欢一些想法(因为我觉得我的想法并不是那么好),或者更好的是我可以利用的一些模式。
提前致谢
您可以创建代理,并将该代理发送到您的实体类。
class MyClass { public int MyProperty { get; set; } } class MyProxyClass { public MyProxyClass(MyClass myClass) { _myClass = myClass; } private MyClass _myClass; public int MyProperty { get { return _myClass.MyProperty; } } }
“内部”不足以满足您的需求吗?
您可以将setter作为显式实现移动到接口中。 然后,它们从公共接口隐藏,只有在转换为界面时才可访问。
如果你想确定没有其他人可以调用它,你可以在这些函数中添加一些参数,你期望某个令牌对象只能提供给受信任的类。
void SetX(int value, object token) { if(token!=correctToken) throw new ArgumentException("wrong token"); x=value; }
您可以尝试使用Google朋友程序集。 这将只允许您指定的程序集访问您的私有(snicker)。
也许我理解的东西不太好,但我认为Jon有一个非常类似的问题, 他在这里描述 。 也许这可以帮到你。
怎么样
class Callee { public void SetX(TypeOfCaller caller, int value) { } } class TypeOfCaller { public void Do() { Callee instance; //.. instance.SetX(this, 5); } }
这样做; 您还可以使用Visual Studio的“查找引用”function! 如果你想要多种类型的来电者; 您可以选择类层次结构,也可以只需要重载
为什么不返回受保护对象的克隆而不是实际对象? 解决问题而不增加任何复杂性。
上述就是C#学习教程:限制对特定对象的公共setter访问(C#)分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public class MyService { private List _protectedObjects = new List (); public MyObject GetItem(int id) { return (MyObject)_protectedObjects.First(i => i.Id == id).Clone(); } } public class MyObject : ICloneable { //[...] public object Clone() { return MemberwiseClone(); } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/962387.html