Мы можем создать объект с динамическими свойствами (то есть во время выполнения программы создавать любые свойства и использовать их).
Тоже самое что и
объекты в javascript...
C#
Создаем новое C# консольное приложение... и напишем код
using System;
using System.Dynamic; // подключаем библиотеку для ExpandoObject
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// создаем объект
dynamic viewbag = new ExpandoObject();
// добавляем любые свойства
viewbag.aaa = "Hello";
viewbag.bbb = 123;
// на экране увидим "Hello"
Console.WriteLine(viewbag.aaa);
}
}
}
Объяснение примера
Мы используем не существующие свойства и на компиляции ошибок нет (потому что объект объявленный со типом
dynamic везде в коде пропускается компилятором на ошибки). Читать подробно что такое тип
dynamic ...
Во время выполнения программы новые свойства связываются с помощью класса
ExpandoObject
C#
Создаем новое C# консольное приложение... и напишем код
using System;
using System.Dynamic;
using System.Collections.Generic;
namespace ConsoleApplication1
{
class MyObject : DynamicObject
{
protected Dictionary<string, object> Values = new Dictionary<string, object>();
// установка свойства
public override bool TrySetMember(SetMemberBinder binder, object value)
{
Values[binder.Name] = value;
return true;
}
// получение свойства
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
result = null;
if (Values.ContainsKey(binder.Name))
{
result = Values[binder.Name];
return true;
}
return false;
}
}
class Program
{
static void Main(string[] args)
{
// создаем объект
dynamic viewbag = new MyObject();
// добавляем любые свойства
viewbag.aaa = "Hello";
viewbag.bbb = 123;
// на экране увидим "Hello"
Console.WriteLine(viewbag.aaa);
}
}
}
Вы можете перекрыть и другие методы DynamicObject.
Подробнее
DynamicObject ...