C#4 позволит “динамический кастинг”? В противном случае C# должен поддерживать его?

Добавление в качестве запроса отличается от использования тела запроса. Вы можете вызвать функцию вместе с телом запроса в Python следующим образом (просто пример):

reqBody = {
        'customerid' : customerid,
        'imgdata' : imgdata
    }
headers = {
        'Content-Type': 'application/json',
    }
url = "https://xxxxx.azurewebsites.net/api/HTTPTrigger.............."
response = requests.post(url, headers=headers,
                             data=json.dumps(reqBody))
print(response.json())
6
задан Jeff Yates 30 April 2009 в 18:38
поделиться

3 ответа

Я думаю, что у Джона Скита было такое предложение ( http://msmvps.com/blogs/jon_skeet/archive/2008/10/30/c-4-0-dynamic -lt-t-gt.aspx ), но до сих пор я не слышал, что C # 4.0 будет иметь его.

3
ответ дан 16 December 2019 в 21:45
поделиться

Я думаю, это проблематично. Вы вводите связь между двумя классами, которые не связаны между собой.

Рассмотрим следующий код.

public interface IFoo
{
   int MethodA();
   int MethodB();
}

public class Bar
{
   int MethodA();
   int MethodB();
}

public class SomeClass
{
   int MethodFoo(IFoo someFoo);
}

Должен ли это быть допустимым?

int blah = someClass.MethodFoo((dynamic<IFoo>)bar);

Похоже, что должно быть допустимым, потому что компилятор должен уметь динамически печатать bar как нечто, реализующее IFoo.

Однако в этот момент вы связываете IFoo и Bar через вызов в совершенно отдельной части вашего кода.

Если вы редактируете Bar, потому что он больше не нуждается в MethodB, вдруг someClass.MethodFood больше не работает, даже если Bar и IFoo не связаны.

Точно так же, если вы добавите MethodC () в IFoo, ваш код снова сломается, даже если IFoo и Bar якобы не связаны.

Дело в том,

3
ответ дан 16 December 2019 в 21:45
поделиться

В C # нет необходимости поддерживать это, так как он может быть реализован очень чисто как библиотека.

Я видел три или четыре отдельных реализации (я начал писать одну сам, прежде чем нашел их). Вот наиболее подробное описание, которое я видел:

http://bartdesmet.net/blogs/bart/archive/2008/11/10/introduction-the-c-ducktaper-bridging-the-dynamic-world-with -The-статическому мир. aspx

Вероятно, будет еще проще реализовать, когда DLR будет интегрирован в среду выполнения.

Поскольку класс оболочки / пересылки для данного интерфейса может быть сгенерирован один раз, а затем кэширован, а затем задан объект неизвестного типа можно обернуть один раз, есть много возможностей для кэширования сайтов вызовов и т. д., поэтому производительность должна быть превосходной.

Напротив, я думаю, что ключевое слово dynamic , которое является функцией языка, и чрезвычайно сложный, представляет собой ненужное и потенциально катастрофическое отступление от языка, ранее имевшего очень четкую философию статической типизации, которая дала ему очевидное направление для будущего улучшения. Им следовало придерживаться этого и заставить вывод типов работать все лучше и лучше, пока набор текста не станет более невидимым. Есть так много областей, в которых они могли бы развивать язык, не нарушая существующие программы, но они этого не делают, просто из-за ограничений ресурсов (например, причина, по которой var не может использоваться в большем количестве мест, состоит в том, что им пришлось бы переписать компилятор, а у них нет времени).

Они по-прежнему делают хорошие вещи в C # 4.0 (функции дисперсии), но есть еще много всего, что можно было бы сделать, чтобы сделать систему типов более умный, автоматический, более мощный при обнаружении проблем во время компиляции. Вместо этого мы, по сути, получаем уловку.

Они по-прежнему делают хорошие вещи в C # 4.0 (функции вариации), но есть еще много всего, что можно было бы сделать, чтобы сделать систему типов более умной, более автоматической и более мощной при обнаружении проблем во время компиляции. Вместо этого мы, по сути, получаем уловку.

Они по-прежнему делают хорошие вещи в C # 4.0 (функции вариации), но есть еще много всего, что можно было бы сделать, чтобы сделать систему типов более умной, более автоматической и более мощной при обнаружении проблем во время компиляции. Вместо этого мы, по сути, получаем уловку.

1
ответ дан 16 December 2019 в 21:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: