繁体   English   中英

在C#中编写静态和非静态方法时,如何避免出现“调用不明确……”错误?

[英]How do I avoid 'call is ambiguous…' error when writing static and non-static methods in C#?

我有许多表示业务交易调用的类:执行适当的存储过程。

现在看起来像这样:

public static class Request
{
    public static void Approve(..) {
        using(connection) {
            command.Text = "EXEC [Approve] ,,"]
            command.ExecuteNonQuery();
        }
    }
}

我想使它们更加线程安全:

public class Request {
    public static void Approve(..) {
        new Request().Approve(..);
    }

    internal void Approve(..) {
        using(connection) {
            command.Text = "EXEC [Approve] ,,"]
            command.ExecuteNonQuery();
        }
    }
}

但是得到下一条错误消息:

该调用在以下方法或属性之间是不明确的:“ MyNamespace.Request.Approve(..)”和“ MyNamespace.Request.Approve(..)”

如何强制标记我从静态调用非静态实例方法?

还是不重命名其中一种方法就无法做到这一点? 或将静态方法移动到另一个类,等等

C# 允许 不允许静态方法通过实例引用调用。 因此,方法必须命名不同或使用参数重载来区分静态方法和实例方法。

在您的示例中,由于Approve()方法是内部方法,因此重命名它可能是您最简单的选择。

至于标记一个方法是静态的...我(个人)认为该名称是区分两者的完美好方法-为什么要发明更复杂的方法。

如果要从实例(例如requestVar.Approve() )进行调用,则不能,您必须重命名它。 可以通过使用Request.Approve()来调用静态方法。

暂无
暂无

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

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