1

我有一个像这样的对象

public class Simple
{
    public string Value
    {
      get { return GetProperty(); }
    }

    // different methods, fields, events, etc.
}

可以用相等的对象替换Simple类的实例,但是用setter?

如何实施...

private object Substitution(object simple)
{
    object newSimple;

    // implementations

    newSimple.Value = "data";
    return newSimple;
}

拥有这样的东西

public class Simple
{
    public string Value { get; set; }

    // my methods, fields, events ...
}

我想创建一个类并从 SystemObject 继承,然后您可以创建不同的动态属性,但不能这样做:(

或者也许尝试从这个对象继承(如何?)并覆盖属性?

谢谢

4

2 回答 2

0

您不能在运行时更改已加载类型的定义或结构。

您可能会创建一个具有类似属性和字段集的新类型,并添加属性设置器。但是,在大多数情况下,这将是有限的用途,因为现有代码将无法理解新类型(因为它是运行时生成的),因此仍将处理现有类型,这将不兼容。

通常,如果您需要在一个类型中进行运行时可扩展性,还有其他选项,包括使用 aDictionary<T,U>dynamicwithExpandoObject或其他一些机制,用于在编译时未知的类中存储“额外”信息。

于 2012-05-24T18:06:11.200 回答
0

You couuld always use an interface, that only defines a property getter. Then in the implementation have a property setter?

class Program
{
    static void Main(string[] args)
    {
        IMyClass myA = new ClassA{ Property = "Class A" };

        Console.WriteLine(myA.Property);

        // can't do this
        // myA.Property = "New Property"; 

        // can do this
        (myA as ClassA).Property = "New Property"; 
        Console.WriteLine(myA.Property);
    }
}

interface IMyClass
{
    string Property { get; }
}

class ClassA : IMyClass
{
    public string Property { get; set; }
}

Failing that, you could do an user defined conversion using the explicit keyword, more info at MSDN

于 2012-05-24T18:13:24.173 回答