我正在开发一个非常具体的图形过滤功能。 它背后的整个数学正在开发中,它很长并且经常变化。我希望我对功能测试有更好的控制
在C#中,函数有一个输入模式,如
Private int MyFunction (argument1,argument2,argument3....)
但是我想把这个函数称为
Result = MyFunction(arg1,arg2,arg3).MathTest2
我可以在函数本身内部定义任何新的MathTestX。 所以我对函数的调用不需要在所有使用它的程序中进行调整。这样的事情可能吗? 或者我必须声明一个枚举或常量,如下所示:
Result = MyFunction(arg1,arg2,arg3,MathTest2) // and thus update all progs that make use of it.
如果有可能那么它对我来说也很关键,它不需要对系统内存或cpu明智的压力。因为滤镜需要在60帧/秒的高速凸轮上工作,所以我的数学需要保持快速。我只有毫秒才能使用。
我意识到整个事情变得接近对象符号,(比如调用.net函数)就像L = MyString.length
在对象内创建一个函数可能会有所帮助,但我对这里的速度有疑问,如果应该这样做,速度是一个关键因素。
答案 0 :(得分:0)
我认为你要立即关注太多问题。所以打破你的问题:
1。 使用某种符号的便利性 - 我个人不会对此过于强烈。您要求的是easily doable with generics,如:
private T MyFunction<T>(arg1, arg2, arg3) {
// ... method body
}
你传入的类型为T会有一些你希望获得的属性。然后你可以调用函数:
MyFunction<MyClass>(arg1, arg2, arg3).MyClassProperty
答案 1 :(得分:0)
可能的解决方案就是这个;
创建一个静态类:
public static class XM{
public static MathTest MyFunction(this MathTest mt, arg1,arg2,arg3){
//do calcs here on MathTest setting values based on arg1,2,and 3
return mt;
}
}
这允许你像这样调用它....
var result = MathTest2.MyFunction(arg1,arg2,arg3);
这假设MathTest2继承了基类MathTest。您也可以为MathTest2创建扩展方法。另外,你可以创建带有函数的静态扩展mehtods(typeof MyFunction),但上面显示的方式更有意义。
这是为MathTests构建“Fluent”界面的方法。最终你可以做到这样的事情:
MathTest2.ValidateCircleAnswers().ValidateOtherQuestions().ComputeTotalRight()