c # принудительный вызов статической функции со значением по умолчанию вместо нестатического - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть объект для управления INI-файлами.

Я предполагаю, что этот объект должен использоваться двумя способами: статическим и нестатическим.Так что я могу вызвать IniFile.Read напрямую, когда мне просто нужно значение, или я могу создать экземпляр IniFile Object и выполнить некоторые операции.Все нестатические функции вызывают статический эквивалент, myIniFile.Read(sectionName, value, defaultValue) вызывает IniFile.Read(iniPath, sectionName, value, defaultValue).Функция Read() имеет значение по умолчанию для последнего параметра.

Моя проблема в том, что когда я вызываю функцию IniFile.Read(), компилятор не знает, вызываю ли я статическую функцию или другую.Есть ли способ решить эту проблему?

public static string ReadValue(string filePath, string section, string key, string defaultValue="")
public string ReadValue(string Section, string Key, string defaultValue="")

Ответы [ 3 ]

0 голосов
/ 22 ноября 2018

Если вы явно указали префикс метода перед именем типа, он должен вызвать статический метод;например:

public void InstanceCallSite()
{
    ReadValue("a", "b", "c");
    // or in the general case: someInstance.ReadValue("a", "b", "c");
    Foo.ReadValue("a", "b", "c");
}

public static void StaticCallSite()
{
    ReadValue("a", "b", "c");
}

public static string ReadValue(string filePath, string section, string key, string defaultValue = "")
{
    Console.WriteLine("static");
    return "";
}
public string ReadValue(string Section, string Key, string defaultValue = "")
{
    Console.WriteLine("instance");
    return "";
}

Выходные данные использования InstanceCallSite:

instance
static
0 голосов
/ 22 ноября 2018

Альтернатива устранению неоднозначности - учитывая, что вы, по определению, должны иметь другую подпись, это использовать именованные параметры;например:

iniFile.ReadValue(Section: "test", Key: "key");
0 голосов
/ 22 ноября 2018

Для вызова статической функции:

ClassName.Function();

для нестатического:

ClassName class_name = new ClassName();

class_name.Function();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...