Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.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#_Function_Syntax - Fatal编程技术网

这可以用c#函数语法实现吗

这可以用c#函数语法实现吗,c#,function,syntax,C#,Function,Syntax,我正在开发一个非常特殊的图形过滤函数。 它背后的整个数学都在发展中,相当长,而且经常变化。我希望我能更好地控制功能测试 在C#中,函数具有如下输入模式 Private int MyFunction(argument1、argument2、argument3…) 但是我想调用如下函数 Result = MyFunction(arg1,arg2,arg3).MathTest2 我可以在函数内部定义任何新的MathTestX。 因此,我对函数的调用不需要在所有使用它的程序中进行调整。这样的事情可能吗

我正在开发一个非常特殊的图形过滤函数。 它背后的整个数学都在发展中,相当长,而且经常变化。我希望我能更好地控制功能测试

在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

在一个对象内创建一个函数也许可以做到这一点,但我在这里对速度表示怀疑,如果应该做到这一点,速度是一个关键因素。

我认为你应该同时关注太多的问题。所以,把你的问题分解一下:

一,。 使用某种符号的便利性——我个人不会对此作太多强调。您所要求的是:

private T MyFunction(arg1、arg2、arg3){
//…方法体
}
其中,作为T传入的类型将具有您希望获得的某些属性。然后调用如下函数:

MyFunction<MyClass>(arg1, arg2, arg3).MyClassProperty
MyFunction(arg1、arg2、arg3).MyClassProperty
  • 至于速度,过早优化是有害的。所以制作一个原型并运行它。。。只有这样,你才能看到你是否需要优化任何东西/放弃你在#1中追求的一些便利。从我在大多数情况下的经验来看,C#在速度方面确实让人吃惊

  • 对你来说,一个可能的解决办法是:

    创建一个静态类:

    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创建扩展方法。此外,您可以创建接受函数(typeof MyFunction)的静态扩展方法,但上面所示的方法更有意义

    这就是为MathTests构建“流畅”界面的方法。最终,您将能够执行以下操作:

      MathTest2.ValidateCircleAnswers().ValidateOtherQuestions().ComputeTotalRight()
    

    MyFunction(arg1、arg2、arg3)。MathTest2
    意味着
    MathTest2
    与函数的返回值相关,如果必须向函数传递某些内容,则通过参数传递<代码>枚举,类对象,任何你喜欢的。还有一件事要补充,不要担心性能。首先使其可行,如果您发现任何性能问题,然后使用内存探查器/.Net探查器查找原因并进行纠正。速度的问题是,我的数学必须处理相机输入,我无法真正降低其帧速率,否则机器的其他部分将无法工作。。。但是到目前为止,即使它的C++和C++都在我使用的数学上做得很好。嗯,是的,我想去的地方也是这样:)但是,HMM是如何联系MaTestTo和MaTest2的?MaTestTo是一个抽象的“共同点”,比如说“MayTest2”,“MathTest3”等等,但是如果你还没有到那个程度,只需为MathTest2制作扩展方法。感谢John,我将研究扩展方法,我的问题是,我几乎没有受过教育的编程背景,在我的工作中,它更多地是编码/设计/工程的一部分,以及大量的数学和大部分创造力的结合。。我学了很多编码语言(~12),但我缺乏编程术语,比如“流畅”和“扩展方法”。我自我教育中的一个问题。只有当我偶然发现新事物时,我才能学到它们,就像这些……是的,我们都在同一条船上,因为在技术世界中,每天都会带来我们必须学习的新事物。。。现在一天都很难集中注意力。。。
      MathTest2.ValidateCircleAnswers().ValidateOtherQuestions().ComputeTotalRight()