繁体   English   中英

C#不能声明具有相同参数的静态和非静态方法?

[英]c# cannot declare static and non static methods with same parameters?

如果我尝试使用相同的参数声明静态和非静态方法,则编译器将返回错误:类型“ Test”已经定义了具有相同参数类型的成员“ Load”。

    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;
        }

据我所知,这两种方法不能混合使用,在对象上调用非静态方法,而在类上调用静态方法,那么为什么编译器不允许这样的事情,并且有办法做类似的事情?

如果您的Test类具有这样的方法:

public void CallLoad()
{
    Load(5);
}

编译器将不知道要使用哪个Load()。 类成员完全允许调用没有类名称的静态方法。

至于如何做类似的事情,我猜最好的办法是给这些方法提供相似但不同的名称,例如将static方法重命名为LoadTest()LoadItem()

在类本身内部,您可以调用实例方法和静态方法,而无需实例或类名,因此,如果名称和参数相同,则这两种方法就无法区分:

class Test
{
    public void Foo()
    {
        Load(0); // Are you trying to call the static or the instance method?
    }

    // ...
}

方法的签名是名称和参数(数字和类型)的组合。

在您的情况下,您的2个方法具有相同的签名。 一个是静态的而另一个是静态的这一事实在接受它们作为该类的有效方法方面没有什么区别。

我不这么认为。 如果此类中的非静态方法调用Load(intValue)。 将调用哪种方法?

两种方法具有相同的名称,在相同的类(作用域)中定义且具有相同的签名。 C#不允许这样做。

问题与编写thisclassname无关。 C#规范允许您使用对象实例调用静态方法:

AClass objectA = new AClass();
objectA.CallStaticMethod();

该代码有效,因此编译器永远无法知道您是在调用静态方法还是实例方法。

在C#中,返回类型不能重载方法。 无论该方法是否静态,它至少必须具有一组不同的参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM