我正在阅读其他人的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#中常用吗?它是如何被称为的?
答案 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);
没有别的