Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在助手类中使用静态方法与非静态方法_C#_Oop_Static Methods - Fatal编程技术网

C# 在助手类中使用静态方法与非静态方法

C# 在助手类中使用静态方法与非静态方法,c#,oop,static-methods,C#,Oop,Static Methods,我有一个helper类,它接受某个对象,处理它并返回另一个类的某个实例,甚至返回对象列表。 最好的方法是什么:使这个helper方法是静态的还是非静态的? 问题是,我的应用程序可以创建很多汽车对象,我在想,当每个应用程序都使用静态帮助程序时,是否会产生负面影响?大多数帮助程序或实用程序类都使用静态方法。如果您想创建助手类的多个实例,您应该只使用非静态方法,但是因为您只需要一个简单的输入->函数->输出,所以我会将这些方法设置为静态。也许这是可以解决的问题,而无需确定助手对象的生命周期 您应该尝试

我有一个helper类,它接受某个对象,处理它并返回另一个类的某个实例,甚至返回对象列表。 最好的方法是什么:使这个helper方法是静态的还是非静态的?
问题是,我的应用程序可以创建很多汽车对象,我在想,当每个应用程序都使用静态帮助程序时,是否会产生负面影响?

大多数帮助程序或实用程序类都使用静态方法。如果您想创建助手类的多个实例,您应该只使用非静态方法,但是因为您只需要一个简单的输入->函数->输出,所以我会将这些方法设置为静态。

也许这是可以解决的问题,而无需确定助手对象的生命周期

您应该尝试利用依赖项注入方法:

public class X
{
   public X(IHelper helper)
   {
        Helper = helper;
   }

   private IHelper Helper { get; }

   public void DoStuff() 
   {
        var result = Helper.DoOtherStuff(input);
   }
}

也就是说,X不知道Helper是否总是同一个实例,或者它是否是一个临时对象。这使得代码更干净、测试更友好,因为您可以使用一个假的IHelper实现来模拟帮助程序,以确保您只是在测试X。

使用静态类,该类中没有实例、没有派生,只有静态方法

public static class HelperClass
{
   public static void HelperMethod()
   {
       // do something
   } 
}

您是否有一些示例代码可以帮助您对您的问题给出最合适的答案question@J.Doe是的。你的车可能爆胎了。除了笑话,你能给我们看一些代码吗?在测试你的类时,你需要模拟一些功能吗?测试的是原始类,而不是帮助类?如果是这样的话,你就不应该使用静态方法。这种方法的可能重复是错误的。只有在有充分理由使静态类/方法成为静态的情况下,才应该使用静态类/方法,而不是相反。@shay\uuuuu是否希望它是一个与任何状态无关或需要重写的辅助方法?@shay\uuuuuu实用程序类通常是静态的。为单个不相关的方法实例化对象是多余的。他的建议没有错,你误解了它。@Stavm人们通常这样做并不意味着这样做是正确的。HelperClass.GetRuntimeConfigurations与对象的状态无关,但静态是错误的,您无法轻松地对其进行模拟测试。在您的示例中,我将类型更改为IHelper,以强调X和它的helpern之间没有耦合,如果在多个地方需要,这不是非常有用,因为静态只能在内部类中使用。