c#不能用相同的参数声明静态和非静态方法?
如果我试图用相同的参数声明静态和非静态方法,编译器将返回一个错误:“Test”类型已经用相同的参数类型定义了一个名为“Load”的成员c#不能用相同的参数声明静态和非静态方法?,c#,class,methods,C#,Class,Methods,如果我试图用相同的参数声明静态和非静态方法,编译器将返回一个错误:“Test”类型已经用相同的参数类型定义了一个名为“Load”的成员 class Test { int i = 0; public int I { get { return i; } set { i = value; } } public bool Load(int newValue)
class Test
{
int i = 0;
public int I
{
get { return i; }
set { i = value; }
}
public bool Load(int newValue)
{
i = newValue;
return true;
}
public static Test Load(int newValue)
{
Test t = new Test();
t.I = newValue;
return t;
}
据我所知,这两种方法不能混合使用,非静态方法是在对象上调用的,而静态方法是在类上调用的,所以为什么编译器不允许这样做,有没有类似的方法 在类本身内部,您在没有实例或类名的情况下调用实例方法和静态方法,因此,如果名称和参数相同,则这两种方法不可区分:
class Test
{
public void Foo()
{
Load(0); // Are you trying to call the static or the instance method?
}
// ...
}
如果您的
测试
类有如下方法:
public void CallLoad()
{
Load(5);
}
编译器不知道要使用哪个Load()。类成员完全允许在没有类名的情况下调用静态方法
至于如何做类似的事情,我想你最好的办法是给方法取相似但不同的名字,比如把
static
方法重命名为LoadTest()
或LoadItem()
我不这么认为。如果此类中的非静态方法调用Load(intValue)。将调用哪个方法?两个方法具有相同的名称,在相同的类(范围)中定义,并且具有相同的签名。C#不允许这样做。方法的签名是名称和参数(数字和类型)的组合
在您的例子中,您的两个方法具有相同的签名。一个是静态的,另一个不是静态的,这一事实在接受它们作为类的有效方法方面没有区别 这个问题与编写
这个
或类名
无关。C#规范允许您使用对象实例调用静态方法:
AClass objectA = new AClass();
objectA.CallStaticMethod();
这段代码是有效的,因此编译器永远无法知道您是在调用静态方法还是实例方法。在C#中,返回类型不能重载方法。它必须至少有一组不同的参数,不管该方法是静态的还是非静态的。名称或参数类型不能相同,编译器不关心其中一个是静态的。