【问题标题】:Change from static to non static method in .NET MVC app在 .NET MVC 应用程序中从静态方法更改为非静态方法
【发布时间】:2020-03-27 10:21:52
【问题描述】:

我的 MVC 应用程序中有一个创建 pdf 文件的方法(将对象与要写入的数据和路径作为参数)。我在一个单独的类中编写了该方法,并将其设为静态。在我的控制器上的另一个函数中,我这样调用这个方法:

PdfGenerator.GeneratePdfMethod("write this string", "path");

现在如果我将此方法更改为非静态,我必须实例化一个 PdfGenerator 对象,然后在该对象上调用该函数:

PdfGenerator p = new PdfGenerator();
p.GeneratePdfMethod("write this string", "path");

现在我怎样才能避免必须创建这个对象而不使我的方法静态?如果它是可能的和可取的?

【问题讨论】:

  • 这是静态方法和实例方法之间的区别,请尝试谷歌搜索“静态与实例方法”。如果你只想用一行代码调用它,你可以写new PdfGenerator().GeneratePdfMethod("write this string", "path");
  • 我知道这一点,但我能不能让它继承另一个类或某个对象的实例?
  • 我看不出你不想让它成为静态的原因。您仅在 1 种方法上使用 pdfGenerator 吗?还是您在不同控制器上以多种方法使用它?
  • 我只在一种方法上使用它。我只想知道 id 如果它不是静态的,还有另一种调用方式。这个项目来自其他人,我只是添加了这个方法,我看到这个 mvc 应用程序中的大多数其他功能都不是静态的。
  • 我更喜欢它是静态的,但我做这个的人出于某种原因不希望在他们的应用程序中使用静态方法

标签: c# .net asp.net-mvc static-methods


【解决方案1】:

现在我怎样才能避免必须创建这个对象而不使我的方法静态?如果有可能……?

没有。您必须先创建该类的实例,然后才能访问其任何成员,包括 GeneratePdfMethod 方法。

您可以在一行中完成此操作:

new PdfGenerator().GeneratePdfMethod("write this string", "path");

当成员为static 时,它不属于特定实例,而是属于类型本身。

相反,非静态方法属于特定实例,这意味着您需要引用该特定实例才能调用该方法。

如果GeneratePdfMethod 不访问任何实例数据,它应该是static

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多