第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

屬性總是不可變的嗎?

屬性總是不可變的嗎?

C#
茅侃侃 2022-07-23 09:01:27
我目前在為類成員使用自動生成的屬性時遇到問題。在類上調(diào)用方法應(yīng)該更新屬性,但它似乎不起作用。我正在更新一些舊的 C# 代碼,VS2017 建議我提供一些重構(gòu)技巧,例如,將具有手動提供的屬性的私有成員轉(zhuǎn)換為自動生成的屬性。VS 只需單擊幾下就可以輕松完成,一切都編譯得很好。問題是代碼不像以前那樣工作??紤]以下簡化的代碼示例:using System;public class Program    {    struct A    {        public A(int x) : this()        {            X = x;        }        public int X { get; private set; }        public void Update(int y)        {            X += y;        }    }    class B    {        private A _secondVar;        public B()        {        }        public A MyVar { get; set; }        public A SecondVar        {            get { return _secondVar; }            protected set { _secondVar = value; }        }                   public void Foo(int z)        {            MyVar.Update(z);            _secondVar.Update(z);        }           }    public static void Main()    {        B b = new B();        Console.WriteLine("BEFORE: b.MyVar: " + b.MyVar.X + ", b.SecondVar: " + b.SecondVar.X );        b.Foo(23);        Console.WriteLine("AFTER: b.MyVar: " + b.MyVar.X + ", b.SecondVar: " + b.SecondVar.X );    }}輸出是:BEFORE: b.MyVar: 0, b.SecondVar: 0AFTER: b.MyVar: 0, b.SecondVar: 23我希望調(diào)用MyVar.Update(z)會更新屬性,并且后續(xù)調(diào)用MyVar.X應(yīng)該提供更新的值。這是預(yù)期的行為,還是 C# 中的錯誤?
查看完整描述

1 回答

?
元芳怎么了

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超7個贊

您正在使用可變結(jié)構(gòu),正是出于這個原因,強(qiáng)烈建議您不要這樣做。


你的代碼在這里:


public void Foo(int z)

{

    MyVar.Update(z);

    _secondVar.Update(z);

}

相當(dāng)于:


public void Foo(int z)

{

    A tmp = MyVar; // Creates a copy

    tmp.Update(z);

    _secondVar.Update(z);

}

您的_secondVar.Update(z)代碼更改了 的值,_secondVar因?yàn)槟苯釉谧兞可险{(diào)用它。您的屬性并非如此 - 使用屬性獲取器實(shí)際上是調(diào)用一個返回值的方法,該值是變量值的副本。


如果您要使用類,您會看到您期望的行為,因?yàn)檫@樣您就不會嘗試更改底層變量的值,而是更改它所引用的對象中的內(nèi)容。


查看完整回答
反對 回復(fù) 2022-07-23
  • 1 回答
  • 0 關(guān)注
  • 112 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號