簡體   English   中英

有沒有辦法將參數傳遞給 setter

[英]Is there a way to pass an argument to a setter

有沒有辦法將參數傳遞給 setter? 我如何將字符串傳遞給下面的設置器? 我將如何使用新的字符串參數調用 setter?

public string It
{
   get{ { return it;}

   set { it = value;}
}

非常感謝

根據您分配給屬性的值,setter 將value作為自己的“參數”:

foo.It = "xyz"; // Within the setter, the "value" variable will be "xyz"

如果你想使用額外的參數,你需要一個indexer

public string this[string key]
{
    get { /* Use key here */ }

    set { /* Use key and value here */ }
}

然后你可以訪問它

foo["key"] = "newValue";

您不能在 C# 中給出索引器名稱,或按名稱使用其他語言的命名索引器(COM 的情況除外,自 C# 4 起)。

編輯:正如 Colin 所指出的,您應該謹慎使用索引器......不要只是將它們用作僅為 setter 獲取額外參數的方式,然后您會在 getter 中忽略這些參數。 這樣的事情會很糟糕:

// Bad code! Do not use!
private string fullName;
public string this[string firstName]
{
    get { return fullName; }
    set { fullName = firstName + " " + value; }
}

// Sample usage...
foo["Jon"] = "Skeet";
string name = foo["Bar"]; // name is now "Jon Skeet"

你可以像給變量賦值一樣賦值:

It = "My String";

屬性 getter/setter 只是string get_It()void set_It(string value)的語法糖

屬性不允許 C# 中的 arguments。

如果您確實需要其他信息才能正確設置It ,那么推薦的解決方案是將 setter 實現為一種方法:

public void SetIt(string value, string moreInfo) {...}

為了贊美其他人在這個古老的線程中所說的話......

也許更好的方法是定義一個struct來保存您要傳遞的額外信息,然后以這種方式傳遞數據。 例如:

struct PersonName {

    public string Forename { get; set; }
    public string Surname { get; set; }

    public PersonName(string fn, string sn) {
        Forename = fn;
        Surname = sn;
    }

}

class MyPerson {

    public string Forename { get; set; }
    public string Surname { get; set; }
    public DateTime dob { get; set; }

    ...

    public PersonName Fullname {
        get { return Forename + " " + Surname; }
        set {
            Forename = value.Forename;
            Surname = value.Surname;
        }
    }
}

...

    public void main() {
        MyPerson aPerson = new MyPerson;
        aPerson.Fullname = new PersonName("Fred", "Bloggs");
    }

不過,就我個人而言,我認為這對於如此輕微的事情來說太過分了。 此外,它還提出了一個問題——為什么沒有將ForenameSurname對定義為適當的structPersonName )?

通常,我們可以直接為任何屬性賦值,即It = "";

這是 C# 屬性的基礎知識:

屬性(C# 編程指南)

假設您創建了一個具有該屬性的 object blah:

Blah blah = new Blah();
blah.It = "Hello World";
String hey = blah.It;

屬性的想法是用更多的邏輯(和一些隱藏)包裝對局部變量的調用。 所以語法類似於使用本地 class 變量

暫無
暫無

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

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