Я слышал, что в C # обновление выполняется во время компиляции, поэтому его действительно дешево использовать.
Но у меня есть ситуация, когда тип, который я хочу привести, является абстрактным, и он непосредственно не реализует интерфейс, в котором я хочу его преобразовать.
Вот пример:
public interface ISomething
{
void Method();
}
public abstract class Base { }
public class Derived : Base, ISomething
{
public void Method() { }
}
public class OtherDerived : Base, ISomething
{
public void Method() { }
}
public class SomeClass
{
private Base[] _baseArray;
public void SomeMethod()
{
foreach (var item in _baseArray)
((ISomething) item).Method();
}
}
Очевидно, я нахожусь в ситуации, когда каждый элемент _baseArray
на самом деле имеет тип, который наследуется от Base
и реализует ISomething
.
Но так как я не могу точно знать, какой тип каждого элемента находится между Derived
, OtherDerived
или любыми другими типами, которые наследуются от Base
и реализует ISomething
, я должен использовать массив абстрактного базового типа.
Конечно, я мог бы использовать массив ISomething
, но я использую Unity, и интерфейсы не будут сериализованы в режиме редактирования, и мне нужно сериализовать этот массив.
Итак, теперь, когда контекст здесь, мой вопрос следующий:
Обработано ли приведение item
к ISomething
во время компиляции? И если это не так, достаточно ли это дешево, чтобы делать это очень часто (точнее, на каждом кадре)?
Спасибо за ваше внимание, и извините, если я не супер ясен, я не англичанин, так что это не очень легко.
Редактировать: Спасибо за лучший заголовок