Возможно ли определить пользовательское поведение каста прозрачного прокси-сервера в реальном прокси-классе?
Пример:Определить персонализированное литье RealProxy
public class TestProxy : RealProxy
{
public TestProxy() : base(typeof(MarshalByRefObject))
{
}
public override IMessage Invoke(IMessage msg)
{
throw new NotImplementedException();
}
}
object proxy = new TestProxy().GetTransparentProxy();
Console.WriteLine((string)proxy);
Этот код бросает System.InvalidCastException: Невозможно бросить прозрачный прокси к типу System.String. Возможно ли обнаружить литье и обработать его в классе TestProxy
?
Редактировать: Код, который нужно передать в интерфейс COM, будет достаточным.
Я не думаю, что так. Перехват приведения (с использованием явного оператора) - это функция времени компиляции. Ваш трюк пытается передать из 'object' в' string'. Поэтому, даже если вы реализуете какой-либо оператор преобразования «явный», он не будет работать, поскольку «прокси» вводится как «объект». Компилятор C# должен знать информацию о типе во время компиляции. –
@ Шририм я не согласен. Кастинг от 'объекта' к любому другому типу выполняется с помощью CLR, и, как вы можете видеть, CLR обрабатывает это, бросая очень конкретное исключение. – IllidanS4
Я знаю; может быть, я это неправильно сформулировал, я говорю о том, как перехватывать вызовы. Вы можете реализовать «явный» оператор для его перехвата, но компилятору C# требуется информация о статическом типе, чтобы заставить его работать. Я изменил свой последний комментарий, чтобы иметь смысл. –