
public struct SomeStruct{ public int SomeMember { get; set; }}class foo{ private SomeStruct bar; public SomeStruct bar{ get { return bar; } set { bar = value; } }}//Somewhere elsefoo f = new foo();f.bar.someMember = 42; //Error,this doesn't work 我是否必须采用setMemberOfSomeStruct()或者还有其他方法吗?
编辑:具体来说,我想避免不得不一直为这样的结构调用new.我知道使用构造函数SomeStruct(int),这将工作:
f.bar = new SomeStruct(42); //ugh解决方法 使您的结构实现不可变并执行此 *** 作:
var newSomeStruct = new SomeStruct(42 /* Feeds SomeMember */);var myFoo = new Foo();myFoo.bar = newSomeStruct;public struct SomeStruct{ private int _someMember; public int SomeMember { get { return _someMember; } } public SomeStruct(int someMember) { _someMember = someMember; }} 不可变结构有助于保留预期的值类型语义.
如果你不使它不可变,那么上面的代码仍然是让它工作的唯一方法.
或者,但看起来不太好看,在类上公开一个方法来设置类的SomeStruct副本:
public voID SetSomeMember(int val){ _bar.someMember = val; // Note _bar in this example is a fIEld,not a property.} 我只是为了完整性而提供这个,我仍然沿着不变的路线走下去,因为有关于“可变结构是邪恶的”的共识.属性getter是一个问题,就像转换为接口一样 – 不可变的结构解决了这些问题.
还有另一个值得注意的要点 – 不要认为在性能问题确实存在之前存在性能问题.类定义可能与您从中获得的使用样式的结构一样快.分析是这里的王者.
总结以上是内存溢出为你收集整理的c# – 启用对结构的引用的属性语法?全部内容,希望文章能够帮你解决c# – 启用对结构的引用的属性语法?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)