Однако конкретные реализации этого метода явно не ссылаются на «этот» объект.
Да, язык c # не требует префикса this
, потому что в этом нет необходимости.
Так что можно постоянно хотеть вызывать этот метод не только для определенного объектано и в самом классе.
То, что не может быть . C # не допускает использования метода экземпляра и статического метода с одинаковым именем. Таким образом, желание не может быть решено, и необходимо другое решение.
Поскольку это, конечно, невозможно на синтаксическом уровне, я думаю, что это должно быть по крайней мере возможно посредством рефлексии.
Отражение действует только на то, что разрешено. Если у вас не может быть статического объекта и экземпляра с одинаковым именем, Reflection не решит его .
Но мой наивный подход потерпел неудачу с исключением нулевой ссылки, когдапытаясь вызвать метод. Почему?
Поскольку вы вызвали Метод экземпляра в ноль. Ваш пример может быть упрощен до:
(null as string).Count()
То же самое, без отражения. Вы не можете вызвать Count () для NULL.
Я ожидал, что это удастся, потому что я использовал конкретный класс для идентификации конкретного переопределенного метода, поэтому объект "this" и его таблица виртуальных методов ненеобходимо разрешить метод.
Вы по-прежнему не можете вызывать методы для нулевого объекта независимо от того, как вы произвели его.
Как можноЯ заставляю это работать? (конечно, исключая «решение», чтобы определить второй действительно статический метод, который возвращает то же значение).
Вы не можете , исходя из ваших требований:
вызовите этот метод не только для определенного объекта, но и для самого класса.
Обновление 1:
Скорее мое требование - получить очевидно статическийинформация, содержащаяся в теле метода экземпляра (значение) в статическом контексте, каким бы ни было решение.
Это действительно сбивает с толку, вот пример кода:
public class Person
{
// So this is "Static Inforamtion"
public static int StaticInformation()
{
return 1;
}
// instance method
public static int InstanceMethod()
{
return StaticInformation();
}
}
public static class StaticClass
{
public static int StaticContext()
{
return Person.InstanceMethod();
}
}
Это предполагается на основании вашего заявления. Это лучшее, что я могу сделать, чтобы описать ваше предложение как код. Сказать статическую информацию должно означать для большинства, если не всех разработчиков .Net, метод, свойство или поле, помеченные как статические. Тем не менее, крайне неоднозначно указывать статическую информацию, содержащуюся в теле экземпляра . Что такое тело ? Тело метода экземпляра или тело класса?
Мне также интересно, ПОЧЕМУ кто-нибудь захочет это сделать. Кажется, что это просто теоретическая проблема, и она не решит никаких реальных сценариев. При какой ситуации в C # у меня будет своего рода указатель на метод ( MethodInfo ) и я хочу вызвать его, не зная, есть ли у меня экземпляр или нет? И если ожидается тот же результат, то зачем вообще нужен метод Instance?