У меня есть код отражения, и я хотел бы иметь способ привязать имена методов к типам вместо объявления через строки.Есть ли типизированный способ объявить имя метода в C#
У меня есть этот интерфейс:
interface IDoStuff<T> {
void Do(T stuff);
}
Тогда у меня есть этот код:
object stuff = GotThisFromSomewhereElse();
object doer = GotThisFromSomewhereElseAlso();
var doMethodInfo = doer.GetType().GetMethod("Do");
doMethodInfo.Invoke(doer, new[] { stuff });
Проблема в том, что я не могу просто сделать безопасный бросок и назвать его, потому что это общий и я на самом деле не знаю, какой тип T.
Это прекрасно работает, но когда я переименую метод, я должен обновить его, я не слишком обеспокоен тем, что у меня есть тесты, подтверждающие все эти работы, которые защищают от того, что они не знают, что это изменилось.
Это просто очень уродливо, и мне было любопытно, есть ли какой-нибудь пятнистый способ напечатать его и, таким образом, он будет переименован ReSharper, если я его изменю.
Я бы очень хотел что-то вроде:
object stuff = GotThisFromSomewhereElse();
object doer = GotThisFromSomewhereElseAlso();
var doMethodInfo = doer.GetType().Methods.Do;
doMethodInfo.Invoke(doer, new[] { stuff });
Спасибо заранее и, пожалуйста, дайте мне знать, если это то, что возможно в C#.
Короткий ответ: нет. Отражение - это все, что нужно делать динамично. Если вам нужна безопасность типа, вам нужно найти способ сделать это без отражения. – dman2306
Действительно; если Resharper смог переименовать метод автоматически, вам не нужно было бы отражать его, чтобы вызвать его в первую очередь. (Тем не менее, может быть, вы не нуждаетесь в размышлении, и вы еще не справились с этим ...) –