这可以用c#函数语法完成

时间:2015-02-26 17:10:11

标签: 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
在对象内创建一个函数可能会有所帮助,但我对这里的速度有疑问,如果应该这样做,速度是一个关键因素。

2 个答案:

答案 0 :(得分:0)

我认为你要立即关注太多问题。所以打破你的问题:

1。 使用某种符号的便利性 - 我个人不会对此过于强烈。您要求的是easily doable with generics,如:

private T MyFunction<T>(arg1, arg2, arg3) {
    // ... method body
}

你传入的类型为T会有一些你希望获得的属性。然后你可以调用函数:

MyFunction<MyClass>(arg1, arg2, arg3).MyClassProperty
  1. 至于速度 - 过早优化是邪恶的。所以制作一个原型并运行它......只有这样你才能看到你是否需要优化任何东西/放弃你在#1中追逐的一些便利。根据我在大多数情况下的经验,C#在速度方面给人们带来了惊喜。

答案 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()