繁体   English   中英

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

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM