Точно так же, как вам не нужен интерфейс, чтобы иметь класс, вам не нужен класс, чтобы создать объект. Мы собираемся открыть для себя некоторые альтернативы классу.
Динамические объекты
Динамические объекты — это объекты времени выполнения, похожие на обычные объекты JavaScript:
Это хорошо для возврата ответа в формате application/json. В любом случае у большинства объектов JSON нет схемы/чертежа, так зачем тратить время на создание класса? Также в некоторых случаях вы не хотите экспортировать всю модель из-за безопасности и скорости запросов AJAX (меньше данных, более быстрая передача данных).
Обратите внимание: поскольку все в C# принадлежит к классу объектов, динамический объект также является объектом. Вы можете попробовать:
System.Diagnostics.Trace.WriteLine(new{ Name="Kangaroo" } is object);
Он печатает True.
Структура
В приведенном выше примере мы видим структуру с именем Animal, и вы можете поместить в нее все виды свойств, полей и методов. Я даже переопределил метод ToString(). Основное отличие состоит в том, что структура является типом значения. Также структура не может быть унаследована:
Я никогда не использовал структуру в реальной жизни. Когда я не хочу, чтобы класс наследовался, я просто объявлю запечатанный класс:
ExpandObject or Dictionary‹строка,объект›
Мы также можем представить объект в виде словаря строк в качестве ключа (свойства) и объекта в качестве значения. Взгляните на строку 26:
Вы можете присвоить значение свойству USD следующим образом:
returnObj["USD"] = новое десятичное число(16150,98); // 1 биткойн в долларах США
Вы также можете объявить метод в этом объекте:
returnObj["GetUSD"]=new Func‹decimal,decimal›(bitCoin =› bitCoin*(decimal)16150.98);
А вот что с этим делать - другой вопрос. При вызове этого метода, скорее всего, будут генерироваться исключения во время выполнения, потому что вам нужно выполнить понижающее приведение от объекта к Func‹decimal, decimal›, а успешность или законность этого не гарантируется.
Мой способ сделать это - сначала передать делегату, а затем вызвать:
var getUSD = returnObj["GetUSD"] as Func‹decimal,decimal›;
System.Diagnostics.Trace.Write(getUSD((десятичный)3.0));
Дайте мне знать, как вы это сделаете, в разделе комментариев ниже. Спасибо, что прочитали мою статью.