在C#中如何称呼这种语言结构/技术?
我正在读别人的C代码,我发现了这行代码: 重新编辑:(缺少精灵对象和一个额外参数) 方法.setColor()不是Foo1类的一部分,它来自另一个类,因此我的问题是如何在方法.move()的末尾调用此方法 Foo1类具有以下声明:在C#中如何称呼这种语言结构/技术?,c#,C#,我正在读别人的C代码,我发现了这行代码: 重新编辑:(缺少精灵对象和一个额外参数) 方法.setColor()不是Foo1类的一部分,它来自另一个类,因此我的问题是如何在方法.move()的末尾调用此方法 Foo1类具有以下声明: public class Foo1 : MonoBehaviour {...} public class ObjectProperties {...} 包含.setColor()方法的类具有以下声明: public class Foo1 : MonoBehavio
public class Foo1 : MonoBehaviour {...}
public class ObjectProperties {...}
包含.setColor()方法的类具有以下声明:
public class Foo1 : MonoBehaviour {...}
public class ObjectProperties {...}
这种技巧在C#中常见吗?它是如何调用的?找出Foo1.move()返回的内容。它应该返回一个具有setColor方法的类,如@Servy所说。
setColor
可能是一个扩展方法,请参见或move()只是返回一个具有setColor
方法的对象。有时称为流畅界面。
为了回答这个问题(我不应该撤回我的投票!!!这个问题缺乏必要的信息),我假设如下:
public class Foo1{
Foo1 move(...);
}
public class ObjectProperties{
static Foo1/void setColor(this Foo1); //magic explained later
}
第二个类的名称表明了这种设置
答复
它被称为,这只是同步糖用于静态辅助方法
扩展方法允许第三方开发人员向其他人开发的类添加方法,而无需使用继承
你聪明的同事找到了一种方法,可以在屏幕上移动一个不是原开发人员编写的Foo1
。您的同事并没有取悦开发人员将新函数添加到类中(包括所有的IP/专利问题,并且必须等待下一个版本),而是在内部完成了所有这些工作
他写道
public static class ObjectProperties {
public static [something] setColor(this Foo1 foo, Object rgb){
}
}
除了要讨论的这个
修饰符之外,上面的方法是一种合法的静态助手方法,可以在较旧的C#版本、Java和任何其他OO语言中使用。它可以访问Foo的公共成员等等
让C#很酷的是,你可以调用这个方法,就像它是Foo1的一个真正的方法一样,从而用一个新方法扩展类
都是糖,宝贝
别上当了。没有魔法,没有黑客,没有Jon Skeet重构Foo1来源的模糊DLL
编译器只需将您的调用翻译为
ObjectProperties.move(Foo1.move(sprite, new Vector3(1.7f, 1.7f, 1.7f), 5f),myRgb);
没有其他内容
方法.setColor()不是Foo1类的一部分
不会移动
返回一个Foo1
,因为除非它返回,否则这是无关的。重要的是,如果setColor
是move
返回的任何类型的方法。我不确定它是否有技术术语,但我会称之为方法链接。它在前一个方法返回的对象上调用一个方法,这是一种非常常见的技术,特别是在LINQ中。它有3个闭合支架,只有2个开口。这个表达式的一部分可能在前一行中,我听过很多人提到这个模式,比如方法链接、方法级联和Fluent接口。它相当受欢迎。是的,这是方法链接。看,例如,它可能是,也可能不是。从语法上讲,扩展方法与普通方法是无法区分的。