Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.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#_Static Methods_Static Members_Static Classes - Fatal编程技术网

C# 如何强制静态类实现特定的方法?

C# 如何强制静态类实现特定的方法?,c#,static-methods,static-members,static-classes,C#,Static Methods,Static Members,Static Classes,我需要创建一组静态类,所有这些类都需要实现相同的方法。我想找到一个办法迫使他们这么做 我知道静态类只能派生System.Object。我应该为此使用非静态方法吗?可能是,但此类的任何方法都不会使用实例属性 我最好的办法是我应该使用一个单身汉。然后我将使用一个实例,但至少我不会在每次需要使用方法时都被迫实例化该类 你建议的替代方案是什么 编辑: 我不会实施这些方法。我需要强制其他开发人员使用特定的签名实现特定的方法。每个类的所有签名都是相同的。就这样 假设您有一个静态类,它从办公室的数据库中获取记

我需要创建一组静态类,所有这些类都需要实现相同的方法。我想找到一个办法迫使他们这么做

我知道静态类只能派生System.Object。我应该为此使用非静态方法吗?可能是,但此类的任何方法都不会使用实例属性

我最好的办法是我应该使用一个单身汉。然后我将使用一个实例,但至少我不会在每次需要使用方法时都被迫实例化该类

你建议的替代方案是什么

编辑: 我不会实施这些方法。我需要强制其他开发人员使用特定的签名实现特定的方法。每个类的所有签名都是相同的。就这样

假设您有一个静态类,它从办公室的数据库中获取记录。你有几种方法可以做到这一点。因为这些方法都不共享变量,所以它们被标记为静态的,类也是静态的

现在,您和您团队中的其他开发人员必须对您无法控制的其他数据库甚至API执行相同的操作,这无关紧要。您希望强制您的同事使用具有相同签名的完全相同的方法实现所有这些类

你的评论总是受欢迎的,但现在我只想找到最接近的方法来做到这一点

我可以使用一个抽象类,其他所有类都可以从中继承。但是由于这些方法不共享任何东西,我不希望每次需要它们时都实例化这个类


这就是我提到使用单例模式的原因。我不应该这样做吗?

如果我正确地阅读了您的问题,那么除非您的方法上有大量重载,否则单例将无法工作

当我们讨论接口、基类等时,如果您控制代码,是否有理由不创建一组实现所需方法的类?当然,你需要记录你做了什么以及为什么要这样做,但是除了坚持“传统”之外,你有没有不这样做的理由

如果您使用的是静态类,这些类不会继承System.Object之外的任何内容,并且没有实现任何接口,那么您无论如何都不能以可交换的方式调用它们

编辑 根据您的编辑,看起来您正试图通过代码本身强制实施应该是编码策略的内容。每个开发车间都有自己的政策、程序和遵循的标准,从文档到项目布局,再到方法签名。我当前的客户对方法签名非常严格,因为我们在BizTalk之间传递了很多东西,而仅仅因为有人不想遵循团队其他成员正在使用的模式而更改BizTalk解决方案是一件痛苦的事情

如果是您团队中的成员编写这些静态类和静态方法,我看不出您不能通过实现策略来实现这一点的原因(除了可能的办公室政治之外)

如果您必须通过代码来实现这一点,我认为您必须使用接口和实例方法


如果您愿意,一旦创建了这些实例方法,就可以将静态助手类编写为包装器(这样您个人就不必每次都实例化对象),但我不知道这会带来什么效果。

为什么需要静态类来实现特定的方法?您通常需要提供特定方法的原因是为了启用多态性,即能够传递不同类型对象的实例,这些对象可以被视为相同的对象。这样的概念对静态类没有意义,因为没有静态类的实例。您能解释一下为什么要使静态类都具有相同的方法吗?这可能会帮助其他人给出更多建议。(目前我想不出为什么会有人想这么做!)你的问题太模糊了,接近于接口的定义。考虑重新思考你的方法,或者提供一个样本场景来帮助你详细说明你想要做的事情。我明白你在说什么。原因在问题的编辑部分。感谢我之所以要这样做,是因为我不会实现所有有问题的类。我不需要任何重载,因为这些方法接受一个变量,该变量是一个类的实例,该类的属性是允许的选项。你的最后一段是什么意思?我不能交互调用静态类中的方法?打1、2、3、2?我在谷歌翻译器上搜索了这个词,但不确定你的意思。阅读问题的编辑部分。谢谢@法比奥·米尔赫里奥:如果我有
静态类Foo
方法
DoStuff()
静态类Bar
方法
DoStuff
我仍然必须指定我需要的类:
Foo.DoStuff()
Bar.DoStuff()