Точно так же, как вам не нужен интерфейс, чтобы иметь класс, вам не нужен класс, чтобы создать объект. Мы собираемся открыть для себя некоторые альтернативы классу.

Динамические объекты

Динамические объекты — это объекты времени выполнения, похожие на обычные объекты 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));

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