Добавление свойства к существующему типу невозможно, но вы можете создать новый тип во время выполнения, используя Reflection.Emit. Это довольно сложный материал, и он выглядит примерно так:
AssemblyBuilder assemblyBuilder = Thread.GetDomain().DefineDynamicAssembly(
assemblyName , AssemblyBuilderAccess.Run, assemblyAttributes);
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("ModuleName");
TypeBuilder typeBuilder = moduleBuilder.DefineType(
"MyNamespace.TypeName" , TypeAttributes.Public);
typeBuilder.DefineDefaultConstructor(MethodAttributes.Public);
// Add a method
newMethod = typeBuilder.DefineMethod("MethodName" , MethodAttributes.Public);
ILGenerator ilGen = newMethod.GetILGenerator();
// Create IL code for the method
ilGen.Emit(...);
// ...
// Create the type itself
Type newType = typeBuilder.CreateType();
Этот код является просто примером. Может содержать ошибки.
Вы также можете генерировать классы, компилируя исходный код C # во время выполнения, используя System.CodeDom, но я об этом немного знаю.