【问题标题】:C# Passing object class as Method ParameterC#将对象类作为方法参数传递
【发布时间】:2015-11-03 04:59:25
【问题描述】:

我正在阅读一些 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()的班级)。有必要吗?

【问题讨论】:

  • 说什么?在您的第一个示例中,传递 book 是有意义的,否则该方法无法采取行动。但是,在您的第二个示例中,Book 显然是该方法所在类的成员,因此无需传递对象-该方法可以直接访问它。这两种情况非常不同。如果你发现自己一直在传递对象,那么你的类设计可能很糟糕。

标签: c# class parameter-passing


【解决方案1】:

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

在您的书籍命名方法中,我认为您不应该将书籍作为参数传递。您的 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);

【讨论】:

    猜你喜欢
    • 2022-01-22
    • 2020-06-05
    • 2019-11-27
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    相关资源
    最近更新 更多