C#可互换属性

时间:2012-08-15 07:06:55

标签: c# types properties weakly-typed

我正在尝试创建一种属性的替代品,它接受多种类型作为输入/输出。

这是一个丑陋的解决方案的伪代码:

http://pastebin.com/gbh4SrZX

基本上我有一些数据,我需要能够为它分配多种类型,并做出相应的反应。我有一些操作的数据,我需要有效的方法来管理在需要时从文件名加载它们,同时保持相同的代码,如果我正在处理已经加载的数据。

这太棒了:

SomeDataClass data1 = new SomeDataClass();
SomeDataClass data2 = new SomeDataClass();

data1.Data = "somefile.dat";
data2.Data = data1.Data;

而SomeDataClass.Data不是字符串的类型。

3 个答案:

答案 0 :(得分:1)

您是否考虑过使用dynamic

class A {
    public dynamic property1 { get; set; }
    public dynamic property2 { get; set; }
}

class Program {

    static void Main(string[] args) {

        A a = new A();
        A b = new A();

        a.property1 = "hello world!";
        b.property2 = a.property1;

        Console.WriteLine(b.property2); // writes "hello world!"
    }
}

答案 1 :(得分:0)

您可以使用隐式转换运算符(即

)执行大部分操作
class SomeDataClass {
    public SomeData Data {get;set;}
}
class SomeData {
    static SomeData Load(string path) {
        return new SomeData(); // TODO
    }
    public static implicit operator SomeData(string path)
    {
        return Load(path);
    }
}
static class Program {
    static void Main()
    {
        SomeDataClass data1 = new SomeDataClass();
        SomeDataClass data2 = new SomeDataClass();

        data1.Data = "somefile.dat"; // this is a load
        data2.Data = data1.Data; // this is not a load
    }
}

然而!坦率地说,我认为更明智地让操作明确:

class SomeDataClass {
    public SomeData Data {get;set;}
}
class SomeData {
    public static SomeData Load(string path) {
        return new SomeData(); // TODO
    }
}
static class Program {
    static void Main()
    {
        SomeDataClass data1 = new SomeDataClass();
        SomeDataClass data2 = new SomeDataClass();

        data1.Data = SomeData.Load("somefile.dat");
        data2.Data = data1.Data;
    }
}

答案 2 :(得分:0)

不确定你要解决的问题究竟是什么问题,但在我看来,你更喜欢使用byte [],处理数据流,从磁盘加载或者在其他地方。

还要考虑只编码到一个通用接口,而不是使用动态和对象。