C# 传递对象 class 作为方法参数

C# Passing object class as Method Parameter

我正在阅读一些 C# 教程,突然想到我在创建方法时从未尝试使用对象 class 作为参数。

例如,我从来没有想过这个:

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");

因此,我倾向于在各处进行 Class 实例化。我的意思是,如果我需要在 Class A 和 B 中访问 Class X,那么我将在 Class A 和 B 中实例化 Class X。现在我意识到如果我开始将对象 class 作为参数传递,我可以将所有实例化放在一个地方(通常是 class 和 Main())。有必要吗?

这完全取决于所有上下文。这种事情的一般规则是,如果你认为这样做有意义,那就去做

在你的书命名方法中,我认为你不应该将书作为参数传递。您 API 的用户应该能够使用此命名书籍:

book.Name = someStuff;

所以您不应该使用另一个 class 中的书籍命名方法,因为为什么要这样呢?另一个class不负责给书起名吧?那就让书来吧!命名方法放在Bookclass.

实际上我并没有真正将对象 class 作为参数传递。我认为这是 "functional" 做事的方式,而不是面向对象的方式。

让我们再看看另一种情况。您正在核心库中使用一个名为 X 的 class,并且您想要向 X 添加一个方法。现在您可能认为您应该像使用 Book 一样将 X 对象传递给方法,因为您肯定不能在核心库中编辑 class!所以这是你的方法:

public void DoStuffWithX(X x, int param) {

}

然后你把它放在另一个 class 中。好吧,自从 C# 3 以来,添加了 扩展方法 ,因此您可以这样做:

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

}

现在您可以使用 X 对象调用此方法!

x.DoStuff(10);

我还看到你总是需要实例化一个class你访问的方法。根据这些 "passing object class as parameter" 方法的性质,它们不应该在调用之前被实例化。换句话说,你应该标记它们 static 这样你就可以这样调用它:

YourClassName.SomeMethod (parameter);

而不是:

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