【问题标题】:Could this be done in c# function syntax这可以在 c# 函数语法中完成吗
【发布时间】:2015-02-26 17:10:11
【问题描述】:

我正在开发一个非常具体的图形过滤功能。 它背后的整个数学正在开发中,它很长并且经常变化。我希望我能更好地控制功能测试

在 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
在对象中创建一个函数可能会解决问题,但我对速度有疑问,如果应该这样做,速度是一个关键因素。

【问题讨论】:

  • MyFunction(arg1,arg2,arg3).MathTest2 暗示MathTest2 与函数的返回值 相关,如果您必须将某些内容传递给函数,则通过参数传递它. Enum,类对象,随便你。
  • 还有一点要补充,不要担心性能。首先使其可行,如果您发现任何性能问题,然后使用内存分析器/.Net 分析器查找原因并纠正它。

标签: c# function syntax


【解决方案1】:

一个可能的解决方案是这个;

创建一个静态类:

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 构建“Fluent”界面的方式。最终,您将能够执行以下操作:

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

【讨论】:

  • 好吧,最终这也是我想去的地方:))
  • 但是 ehm 如何将 MathTest 和 MathTest2 关联起来?
  • MathTest 是所有事物的抽象,例如 "MayTest2"、"MathTest3" 等。但如果您还没有达到这一点,只需为 MathTest2 创建扩展方法。
  • 谢谢约翰,我将研究扩展方法,我的问题是我在没有受过教育背景的情况下进入了编程领域,在我的工作中,它更多地是编码/设计/工程的一部分以及很多数学,主要是创造力。我学了很多编码语言(~12),但我缺乏编程术语,比如“流利”和“扩展方法”。我的自学问题。只有当我偶然发现它们时,我才会学习新事物,比如这些......
  • 是的,我们所有人都在同一条船上,因为在技术世界中,每天都会带来新的东西,我们必须学习......现在很难保持专注......
【解决方案2】:

我认为你要同时关注太多问题。所以分解你的问题:

1。 使用某些符号的便利性 - 我个人不会对此过多关注。你要的是easily doable with generics,比如:

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

您传入的类型 T 将具有您希望获得的某些属性。然后你会调用这样的函数:

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

【讨论】:

  • 速度的问题是我的数学必须在相机输入上工作,我不能真正降低它的帧速率,否则机器的其他部分将无法工作......但到目前为止,即使如果它是 c# 而不是 c++,我在使用数学的速度上做得很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-13
  • 1970-01-01
  • 2011-02-28
  • 1970-01-01
  • 2013-04-27
  • 2019-03-30
  • 1970-01-01
相关资源
最近更新 更多