簡體   English   中英

C#將對象類作為方法參數傳遞

[英]C# Passing object class as Method Parameter

我在閱讀一些C#教程,突然間我感到驚訝的是,我從未嘗試在創建方法時將對象類用作參數。

例如,我將永遠不會想到這一點:

static void GiveBookAName(Gradebook book, string bookName)
{
    book.Name = bookName;
}

我確信我會做這樣的事情:

public void GiveBookAName(string bookName)
{
     Name = bookName;
}

//in other class
Gradebook book = new Gradebook()
book.GiveBookAName("TheGradebook");

因此,我傾向於到處都有類實例化。 我的意思是,如果我需要訪問A和B類中的X類,那么我將在A和B類中都實例化X類。現在我意識到,如果我開始將對象類作為參數傳遞,則可以將所有實例化到一處(通常是Main()的類)。 那有必要嗎?

這完全取決於所有上下文。 這種東西的一般規則是, 如果您認為這樣做是有意義的,那就去做

在您的書名命名方法中,我認為您不應該將書作為參數傳遞。 您的API用戶應該可以使用以下方式為書命名:

book.Name = someStuff;

因此,您不應該在另一個類中使用book-naming方法,因為為什么呢? 另一個班級不負責命名書,對嗎? 然后讓書來做! 將命名方法放在Book類中。

實際上,我並沒有真正將對象類作為參數傳遞。 我認為這是“功能性”的處理方式,而不是面向對象的。

讓我們看看另一種情況。 您正在核心庫中使用一個名為X的類,並且想要向X添加一個方法。 現在您可能認為您應該像將Book那樣將X對象傳遞給方法,因為您當然不能在核心庫中編輯類! 這是您的方法:

public void DoStuffWithX(X x, int param) {

}

然后將其放在另一個類中。 從C#3開始,添加了擴展方法 ,因此您可以執行以下操作:

public static void DoStuff (this X x, int param) {

}

現在,您可以使用X對象調用此方法!

x.DoStuff(10);

另外,我看到您始終需要實例化訪問該方法的類。 由於這些“將對象類作為參數傳遞”方法的性質,在調用之前不必實例化它們。 換句話說,您應該將它們標記為static以便可以這樣稱呼它:

YourClassName.SomeMethod (parameter);

代替:

YourClassName obj = new YourClassName ();
obj.SomeMethod (parameter);

暫無
暫無

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

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