这可能很容易,但我很难过.我想创建一个通用类,它将在我的程序中多次使用.我希望它非常轻巧,超级快.
对于C#中一个非常简单的例子:
public class SystemTest { public TestMethod(string testString) { if(testString == "blue") { RunA(); } else if(testString == "red") { RunB(); } else if(testString == "orange") { RunA(); } else if(testString == "pink") { RunB(); } } protected void RunA() {} protected void RunB() {} }
我希望RunA()和RunB()由实例化此类的对象定义和控制.完全由对象实例化SystemTest类来决定RunA()和RunB()将要做什么.你怎么做到这一点?
我不希望实例对象总是继承这个SystemTest类,我希望它能够快速运行.我唯一想到的是复杂的,处理器密集型的东西.我知道有一种更简单的方法可以做到这一点.
编辑:通常,哪个运行得更快,代理或接口方法在下面的答案?
您可以:
public class SystemTest { Action RunA; Action RunB; public SystemTest(Action a, Action b) { RunA = a; RunB = b; } //rest of the class }
听起来你想要一个界面,比如:
interface ITestable { void RunA(); void RunB(); }
然后你把它传递给(或者转到SystemTest
ctor,或者TestMethod
).调用类可以(例如)实现ITestable并调用TestMethod(this,someString).
或者,也许是一种扩展方法?顺便说一句,string
arg可能是一个枚举?
public interface ITestable { void RunA(); void RunB(); } public static class SystemTest { public static void TestMethod(this ITestable item, string testString) { if(testString == "blue") { item.RunA(); } else if(testString == "red") { item.RunB(); } else if(testString == "orange") { item.RunA(); } else if(testString == "pink") { item.RunB(); } } }
然后调用者只需实现ITestable,任何人都可以调用foo.SomeMethod(color);
实例foo
.