c# – 启用对结构的引用的属性语法?

c# – 启用对结构的引用的属性语法?,第1张

概述据我所知,属性不能返回引用,并且由于结构是值类型,因此无法通过属性返回对结构的引用,这将启用: public struct SomeStruct{ public int SomeMember { get; set; }}class foo{ private SomeStruct bar; public SomeStruct Bar{ get { return bar; 据我所知,属性不能返回引用,并且由于结构是值类型,因此无法通过属性返回对结构的引用,这将启用:

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# – 启用对结构的引用的属性语法?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1234493.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存