我只有一个方法,我需要几个不同的类来访问,只为一个方法创建一个实用程序类似乎很蹩脚。需要使用此方法的类已经继承了一个抽象类,因此我无法使用继承。在这种情况下你们会做什么?
答案 0 :(得分:11)
[我]做一个实用工具似乎很蹩脚 只有一种方法的课程
做到这一点,它会成长。它总是这样。 Common.Utilities或这种性质的东西在任何非平凡的解决方案中总是必要的。
答案 1 :(得分:6)
请记住,课程只是一个小型,专注的机器。如果该类只有一个方法,那么它只是一个非常小型,专注的机器。它没有任何问题,集中代码很有价值。
答案 2 :(得分:2)
你可以使用作弊: - )
创建一个类可以“实现”的接口,但是,在该接口上创建一个扩展方法,然后你的类神奇地获得该方法,而不必调用实用程序类...
public Interface IDoThisThing {}
public static void DoThisThingImpl(this IDoThisThing dtt)
{
//The Impl of Do this thing....
}
现在,您可以在课程中添加IDoThisThing
public class MyClass, MyBaseClass, IDoThisThing
{
//...
}
他们得到那个东西: - )
请注意,这只是一个有效的实用程序类的合成糖,但它确实使客户端代码非常干净(就像你的类中的方法一样)。
答案 3 :(得分:1)
你是什么意思,你不能使用继承?
如果你在抽象类中编写方法,你也可以编写实现(并不是抽象类中的所有东西都需要抽象)。
但一般来说,建议使用某种'GeneralUtils'类;因为你最终得到了一些这样的功能。
答案 4 :(得分:0)
我需要更多信息才能给出明确的答案。 然而,一个命名良好的类具有一个命名良好的方法可以创建可读性的奇迹(例如,与基于继承的解决方案相比)
由于您使用术语实用程序方法,我会说使用静态方法创建一个静态类并完成它。
答案 5 :(得分:0)
可以使用扩展方法......
namespace ExtendMe
{
public interface IDecorate { }
public static class Extensions
{
public static void CommonMethod(this IDecorate o) { /* do stuff */ }
}
public class Blah :IDecorate {}
public class Widget : IDecorate {}
class Program
{
static void Main(string[] args)
{
new Blah().CommonMethod();
new Widget().CommonMethod();
}
}
}