2015-11-03 232 views
0

我正在阅读一些C#教程,突然间我发现创建方法时从未试图使用对象类作为参数。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"); 

正因为如此,我往往有类实例化这里和那里。我的意思是,如果我需要访问Class A & B中的Class X,那么我将在Class A & B中实例化Class X.现在我意识到如果我开始传递object class作为参数,我可以将所有实例化一个地方(通常是Main())。这是必要的吗?

+0

你说什么?在你的第一个例子中,传递'book'是有意义的,否则这个方法不能采取行动。但是,在第二个例子中,'Book'显然是与该方法相同的类的成员,因此不需要传递该对象 - 该方法可以直接访问它。这两种情况非常不同。如果你总是发现自己传递物体,那么你的课程设计可能很差。 –

回答

0

这一切都取决于所有的上下文。这种东西的一般规则是,,如果你认为这样做有意义,那么做

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

book.Name = someStuff; 

所以,你不应该在另一个类的书命名方法,因为为什么应该是什么?其他班级不负责命名书籍,对吧?然后让这本书去做!将命名方法放在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); 
相关问题