Почему cast to interface не проверяется во время компиляции в C# ?
Привет,
Я только что видел вопрос, заданный кем-то другим, на который никто не дал ответа staisfacotry, и просто из любопытства я также хотел знать, почему это время компиляции законно, но, конечно, это не сработает во время выполнения, вот код:
public class DummyClassFactory { public Object GetDummyClassInstance() { var dummyClass = new DummyClass(); switch (DateTime.Now.DayOfWeek) { // Starting on monday. case DayOfWeek.Monday: return (IDisposable)dummyClass; case DayOfWeek.Thursday: return (IServiceProvider)dummyClass; case DayOfWeek.Friday: return (IEquatable<List<Single>>)dummyClass; case DayOfWeek.Saturday: return (IFormattable)dummyClass; } // return (DummyClassFactory)dummyClass; return dummyClass; } } public class DummyClass { } public interface IDummyClass { }
Может ли кто - нибудь пролить свет, почему это так?
Вот демонстрационная скрипка : .Объем демо-Скрипка[^]
Спасибо,
Эхсан Саджад
Что я уже пробовал:
public class DummyClassFactory { public Object GetDummyClassInstance() { var dummyClass = new DummyClass(); switch (DateTime.Now.DayOfWeek) { // Starting on monday. case DayOfWeek.Monday: return (IDisposable)dummyClass; case DayOfWeek.Thursday: return (IServiceProvider)dummyClass; case DayOfWeek.Friday: return (IEquatable<List<Single>>)dummyClass; case DayOfWeek.Saturday: return (IFormattable)dummyClass; } // return (DummyClassFactory)dummyClass; return dummyClass; } } public class DummyClass { } public interface IDummyClass { }
Graeme_Grant
Это лучше объяснит то, что вы видите: Разница между ранним и поздним связыванием[^]