以下程序中的扩展方法不明确
Extension Method not clear in the following program
我在学习中找到了以下程序。我不理解为什么 Class3 和 class4 方法调用与 class1 和 class2 不同的输出。我看不出这四个 类 有什么区别。 class1和class2怎么自动调用扩展方法?
using System;
class Class1 {
}
class Class2 {
public void Method1(string s) {
Console.WriteLine("Class2.Method1");
}
}
class Class3 {
public void Method1(object o) {
Console.WriteLine("Class3.Method1");
}
}
class Class4 {
public void Method1(int i) {
Console.WriteLine("Class4.Method1");
}
}
static class Extensions {
static public void Method1(this object o, int i) {
Console.WriteLine("Extensions.Method1");
}
static void Main() {
new Class1().Method1(12); // Extensions.Method1 is called
new Class2().Method1(12); // Extensions.Method1 is called
new Class3().Method1(12); // Class3.Method1 is called
new Class4().Method1(12); // Class4.Method1 is called
}
}
有什么帮助吗?
I see no difference in all the four classes.
仔细看。 Class1
根本没有本地方法。并且其他三个类中的方法签名都不同。方法签名是编译器决定调用哪个方法的关键。
new Class1().Method1(12); // Extensions.Method1 is called
Class1
没有原生Method1
,所以只能调用扩展方法
new Class2().Method1(12); // Extensions.Method1 is called
Class2
有原生 Method1
, 但 该方法需要 string
作为论据。提供了 int
,这是扩展方法所期望的。这解析为扩展方法,就像没有扩展方法并且 Class2
有两个重载,一个带有 string
和一个带有 int
.
时一样
new Class3().Method1(12); // Class3.Method1 is called
Class3
有一个需要对象的本机方法。由于提供的整数满足了这一点,因此它优先于扩展方法。
new Class4().Method1(12); // Class4.Method1 is called
和上面的Class3
一样,有一个本地方法被这个调用满足。这个更具体,以 int
作为参数。
我在学习中找到了以下程序。我不理解为什么 Class3 和 class4 方法调用与 class1 和 class2 不同的输出。我看不出这四个 类 有什么区别。 class1和class2怎么自动调用扩展方法?
using System;
class Class1 {
}
class Class2 {
public void Method1(string s) {
Console.WriteLine("Class2.Method1");
}
}
class Class3 {
public void Method1(object o) {
Console.WriteLine("Class3.Method1");
}
}
class Class4 {
public void Method1(int i) {
Console.WriteLine("Class4.Method1");
}
}
static class Extensions {
static public void Method1(this object o, int i) {
Console.WriteLine("Extensions.Method1");
}
static void Main() {
new Class1().Method1(12); // Extensions.Method1 is called
new Class2().Method1(12); // Extensions.Method1 is called
new Class3().Method1(12); // Class3.Method1 is called
new Class4().Method1(12); // Class4.Method1 is called
}
}
有什么帮助吗?
I see no difference in all the four classes.
仔细看。 Class1
根本没有本地方法。并且其他三个类中的方法签名都不同。方法签名是编译器决定调用哪个方法的关键。
new Class1().Method1(12); // Extensions.Method1 is called
Class1
没有原生Method1
,所以只能调用扩展方法
new Class2().Method1(12); // Extensions.Method1 is called
Class2
有原生 Method1
, 但 该方法需要 string
作为论据。提供了 int
,这是扩展方法所期望的。这解析为扩展方法,就像没有扩展方法并且 Class2
有两个重载,一个带有 string
和一个带有 int
.
new Class3().Method1(12); // Class3.Method1 is called
Class3
有一个需要对象的本机方法。由于提供的整数满足了这一点,因此它优先于扩展方法。
new Class4().Method1(12); // Class4.Method1 is called
和上面的Class3
一样,有一个本地方法被这个调用满足。这个更具体,以 int
作为参数。