aba*_*hev 14 .net c# static-members overload-resolution
让我们有两个成员相同的签名,但一个是静态的而另一个是 - 不是:
class Foo
{
public void Test() { Console.WriteLine("instance"); }
public static void Test() { Console.WriteLine("static"); }
}
Run Code Online (Sandbox Code Playgroud)
但是这样的代码生成会带来编译错误:
类型'Foo'已经定义了一个名为'Test'的成员,它具有相同的参数类型
但为什么?
让我们成功编译,然后:
Foo.Test() 应输出"静态"
new Foo().Test();应该输出"实例"
无法调用静态成员而不是实例1,因为在这种情况下会出现另一个更合理的编译器错误:
无法使用实例引用访问成员'Foo.Test()'; 用类型名称来限定它
Jon*_*eet 13
从实例方法怎么样:
Test();
Run Code Online (Sandbox Code Playgroud)
那叫什么?您可能希望为静态方法赋予实例方法"优先级",但两者都适用.
我会说,即使它被允许,从可读性的角度来看这是一个根本不好的想法...例如,如果你改变了一个Test从静态到实例调用的方法,它会改变意义以一种微妙的方式.
换句话说,我对此被禁止没有问题:)
| 归档时间: |
|
| 查看次数: |
451 次 |
| 最近记录: |