你如何在C#中调用这种语言构造/技术?

时间:2017-02-02 19:31:20

标签: c#

我正在阅读其他人的C#代码,我找到了这一行:

重新编辑:(缺少精灵对象和一个额外参数)

Foo1.move(sprite, new Vector3(1.7f, 1.7f, 1.7f), 5f).setColor(myRGB);

方法 .setColor()不是Foo1类的一部分,它来自另一个类,所以我的问题是关于如何在方法结束时调用此方法 .move()

Foo1类有这个声明:

public class Foo1 : MonoBehaviour {...}

并且包含.setColor()方法的类具有以下声明:

public class ObjectProperties {...}

这种技术在C#中常用吗?它是如何被称为的?

3 个答案:

答案 0 :(得分:2)

setColor可以是扩展方法,请参阅https://msdn.microsoft.com/en-us//library/bb383977.aspx或move()仅返回具有setColor方法的对象。有时称为流畅的界面。

答案 1 :(得分:1)

找出Foo1.move()返回的内容。它应该返回一个具有setColor方法的类,如@Servy所说。

答案 2 :(得分:1)

假设

为了回答这个问题(我不应该撤回我的近距离投票!!!这个问题缺乏必要的信息)我假设如下:

public class Foo1{
     Foo1 move(...);
}

public class ObjectProperties{
      static Foo1/void setColor(this Foo1); //magic explained later
}

第二节课的名字暗示了这个设置

答案

它被称为Extension Methods静态辅助方法只需 synctactic sugar

扩展方法允许第三方开发人员将方法添加到由其他人开发的类中,而无需使用继承。

你聪明的同事发现了一种在屏幕上移动Foo1的方法,这是原始开发者没有写的。而不是让开发人员满意地将新功能添加到课程中(包括所有IP /专利问题以及必须等待下一个版本),您的同事在内部完成了所有这些工作。

他写了

public static class ObjectProperties {

      public static [something] setColor(this Foo1 foo, Object rgb){
      }

}

除了要讨论的this修饰符之外,上面是一个合法的静态助手方法,可以在旧的C#版本和Java以及任何其他OO语言中使用。它可以访问Foo的公共成员等。

C#酷的原因在于你可以将此方法称为,就好像它是Foo1的真实方法,因此使用新方法扩展类< / p>

全是糖,宝贝

不要被愚弄。没有魔法,没有黑客攻击,没有Jon Skeet重构Foo1来自的混淆DLL。

编译器只需翻译您的电话

ObjectProperties.move(Foo1.move(sprite, new Vector3(1.7f, 1.7f, 1.7f), 5f),myRgb);

没有别的