C# 本机接口和扩展方法,what';c的区别是什么?

C# 本机接口和扩展方法,what';c的区别是什么?,c#,.net,C#,.net,在.Net中,我们可以通过两种方式获取方法: 1) 通过实现一个接口 2) 通过方法扩展。(不支持C++和java)< /P> 似乎我们可以使用方法扩展来假装我们“实现”了一个接口,这是真的吗? 如果为真,那么区别是什么?扩展方法只不过是语法上的糖分,可以改变这一点: static class Extensions { public static SomeMethod(Bar foo) } 进入foo.SomeMethod()调用Bar实例,方法是在声明中用this标记第一个参数。

在.Net中,我们可以通过两种方式获取方法:

1) 通过实现一个接口

2) 通过方法扩展。(不支持C++和java)< /P> 似乎我们可以使用方法扩展来假装我们“实现”了一个接口,这是真的吗?
如果为真,那么区别是什么?

扩展方法只不过是语法上的糖分,可以改变这一点:

static class Extensions {

    public static SomeMethod(Bar foo)

}
进入
foo.SomeMethod()
调用Bar实例,方法是在声明中用
this
标记第一个参数。仅此而已。编译器将把对实例方法的调用转换为对静态方法的调用,并将对象实例作为参数

您没有实现任何东西,您基本上只是添加了一些看起来像实例行为的行为,但实际上只是一个静态方法调用


扩展方法基本上类似于从多个接口继承行为,而不仅仅是签名。NET绕过具体行为多重继承的正常问题的方法是,静态方法实际上并不属于接口:它们属于它们自己的静态类。因此,我们可以通过将方法分离到不同的名称空间(包括我们想要的名称空间)或退回到完全限定的静态方法调用来解决冲突

你需要阅读msdn关于不,一点也不。你似乎对这些很困惑。扩展方法是静态方法,它获取要处理的对象的实例。它们根本没有真正扩展原始类/接口,它们只是一种快捷方式/语法糖,使您能够使用
表示法,而不是显式调用静态方法。