这可以用 c# 函数语法完成吗
Could this be done in c# function syntax
我正在开发一个非常具体的图形过滤器功能。
它背后的整个数学都在开发中,它很长而且经常变化。我希望我能更好地控制功能测试
在 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
在对象内部创建一个函数可能会成功,但我对速度是否应该这样做表示怀疑,速度是这里的关键因素。
我觉得你一次关注的问题太多了。所以分解你的问题:
1。
使用某些符号的便利性——我个人不会在这上面放太多。你要的是 easily doable with generics 这样的:
private T MyFunction<T>(arg1, arg2, arg3) {
// ... method body
}
你作为 T 传入的类型会有一些你希望得到的 属性。然后你会像这样调用函数:
MyFunction<MyClass>(arg1, arg2, arg3).MyClassProperty
-
至于速度——过早的优化是邪恶的。所以制作一个原型并 运行 它......只有这样你才会看到你是否需要优化任何东西/放弃你在#1 中追求的一些便利。根据我在大多数情况下的经验,C# 在速度方面肯定会给人们带来惊喜。
一个可能的解决方案是这个;
创建静态 class:
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 继承了基础 class MathTest。您也可以为 MathTest2 创建扩展方法。此外,您可以创建接受函数 (typeof MyFunction) 的静态扩展方法,但上面显示的方法更有意义。
这就是您为 MathTests 构建 "Fluent" 界面的方式。最终你将能够做这样的事情:
MathTest2.ValidateCircleAnswers().ValidateOtherQuestions().ComputeTotalRight()
我正在开发一个非常具体的图形过滤器功能。 它背后的整个数学都在开发中,它很长而且经常变化。我希望我能更好地控制功能测试
在 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
在对象内部创建一个函数可能会成功,但我对速度是否应该这样做表示怀疑,速度是这里的关键因素。
我觉得你一次关注的问题太多了。所以分解你的问题:
1。 使用某些符号的便利性——我个人不会在这上面放太多。你要的是 easily doable with generics 这样的:
private T MyFunction<T>(arg1, arg2, arg3) {
// ... method body
}
你作为 T 传入的类型会有一些你希望得到的 属性。然后你会像这样调用函数:
MyFunction<MyClass>(arg1, arg2, arg3).MyClassProperty
- 至于速度——过早的优化是邪恶的。所以制作一个原型并 运行 它......只有这样你才会看到你是否需要优化任何东西/放弃你在#1 中追求的一些便利。根据我在大多数情况下的经验,C# 在速度方面肯定会给人们带来惊喜。
一个可能的解决方案是这个;
创建静态 class:
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 继承了基础 class MathTest。您也可以为 MathTest2 创建扩展方法。此外,您可以创建接受函数 (typeof MyFunction) 的静态扩展方法,但上面显示的方法更有意义。
这就是您为 MathTests 构建 "Fluent" 界面的方式。最终你将能够做这样的事情:
MathTest2.ValidateCircleAnswers().ValidateOtherQuestions().ComputeTotalRight()