Как избежать ошибки «вызов неоднозначен ...» при написании статических и нестатических методов в C #? - PullRequest
3 голосов
/ 12 октября 2009

У меня есть несколько классов, представляющих вызовы бизнес-транзакций: выполнение соответствующих хранимых процедур.

Теперь выглядит так:

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 (..)'

Как заставить, пометить, что я вызываю нестатический метод экземпляра из статического?

Или я не могу сделать это без переименования одного из методов? Или перемещение статического метода в другой класс и т. Д.

Ответы [ 2 ]

4 голосов
/ 12 октября 2009

C # позволяет не разрешать вызов статических методов через ссылки на экземпляры. Таким образом, методы должны называться по-разному или использовать перегрузку аргументов, чтобы отличать статические методы от методов экземпляра.

В вашем примере, поскольку метод Approve () является внутренним, его переименование, вероятно, является самым простым вариантом.

Что касается маркировки того, что метод является статическим ... Я (лично) думаю, что имя является отличным средством для разграничения двух - зачем изобретать что-то более сложное.

3 голосов
/ 12 октября 2009

Если вы делаете вызов из экземпляра (например, requestVar.Approve()), то нет, вам нужно его переименовать. Статический можно вызвать с помощью Request.Approve() однако.

...