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

时间:2015-11-03 04:59:26

标签: c# class parameter-passing

我正在阅读一些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类和A类的X类B,然后我将在A类和A类中实例化X类。 B.现在我意识到如果我开始将对象类作为参数传递,我可以在一个地方(通常是具有Main()的类)进行所有实例化。这有必要吗?

1 个答案:

答案 0 :(得分:0)

这一切都取决于所有背景。这种东西的一般规则是,如果您认为这样做是有意义的,那么就这样做

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

book.Name = someStuff;

所以你不应该在另一个类中使用book-naming方法,因为它应该是什么?另一个班级不负责命名一本书,对吧?然后让书来做!将命名方法放在Book类中。

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

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

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