[英]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.