Есть ли возможность выполнить некоторый код во время компиляции?Код запуска во время компиляции
Например, я хотел бы проверить, существуют ли запрошенные методы динамического объекта в параметрическом типе универсального класса.
//this code has no actual purpose, just as an example
public class Sample<T>
{
public Sample<T>(T instance)
{
foo = Value = instance;
/* adding some extra code(e.g. logging) to the methods of T, by
inserting a "M" in front of the method names of T */
}
public T Value { get; }
public dynamic foo { get; }
}
Как бы/можно было бы использовать
var foo = new Sample<string>("hey");
foo.MSubstring(0,0);
Теперь я хочу знать, если есть возможность выполнить код во время компиляции, например, бросить исключение до выполнения, что foo.MgetSize()
не существует в Т.
(Этот вопрос только о том, как выполнить код во время компиляции, этот пример не является реальной проблемой.)
Я не» У меня есть план, как это сделать. Может быть, используя эти #if
- вещи?
Одна из этих "' # if' вещей "называется [Директива препроцессора] (https://msdn.microsoft.com/en-us/library/ed8yd1ha.aspx). –
Является ли это проблемой XY? – Tom
Статическая типизация существует, чтобы обеспечить в значительной степени эту функцию: ошибка времени компиляции при несоответствии типов. Выбирая использовать динамическую типизацию в этой точке, вы явно отказываетесь от этой точной функции. Если это всего лишь пример, а не настоящая проблема, которую вы пытаетесь решить, возможно, вы должны это описать. –