簡體   English   中英

C# 如何更改 set 訪問器中值字段的類型?

[英]C# How to change the type of value field in set accessor?

我是 C# 的新手,我試圖使用 set 訪問器將新的 Person object 添加到我的 class Person 的一個名為 children 的人員列表中,使用以下方法,但我也想使用返回的人員數組.

問題是 set 訪問器中的 value 字段是 Person 的數組,我不希望它是那樣的,我希望它是 Person 的實例而不是人員的數組,所以我可以將它添加到 List

class Person
    {
        private string firstName;
        private string lastName;

        public string FullName
        {
            get
            {
                return firstName + lastName;
            }
        }

        public readonly DateTime dateOfBirth;

        public readonly FavoriteColor favoriteColor;

        private List<Person> children;

        public Person[] Children
        {
            get
            {
                return children.ToArray();
            }

            set
            {
                children.Add(value);
            }
        }

    }

那么我可以做些什么來使用屬性在 C# 中實現這一目標?

同一屬性上的 getter 和 setter 不可能有不同的類型。 在大多數情況下,這也沒有多大意義。 您可以使用不同的屬性來獲取和設置:

public Person[] Children => children.ToArray();
public Person LatestChild
{
    set { this.children.Add(value); }
}

但老實說,只添加一個AddChild方法可能是一個更好的主意。

public Person[] Children => children.ToArray();
public void AddChild(Person child)
{
    children.Add(value);
}

如果支持重載分配(單個= ),您也許可以這樣做。

也就是說,該語言不支持重載賦值運算符(這里有一些非正式參考: 12 )。

您正在做的事情不是該語言的慣用語,因此我不鼓勵您嘗試這樣做。 您正在嘗試以對您的代碼的其他讀者來說不直觀或不明顯的方式重新定義操作。

相反,提供一個將值添加到數組的顯式方法(順便說一下,這意味着分配一個新數組,因為 arrays 有固定的界限); 這使您的意圖清晰。 您可以 go 重載+的路線,這會重載+= ,但這仍然超出了語言習語的 realm ,因此可能應該不鼓勵)。

setter 需要一個Person[]類型的 object ,因為這就是您定義屬性的方式。

通過刪除 setter 並將Add(Person person)方法添加到您的 class 來將數組屬性設為只讀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM