我正在阅读一些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()
的类)进行所有实例化。这有必要吗?
答案 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);