2012-08-15 29 views
2

我試圖創建一種替代品的屬性,接受多種類型作爲輸入/輸出。C#可互換的屬性

這裏是一個醜陋的解決方案的一些僞代碼:

http://pastebin.com/gbh4SrZX

基本上我有一塊數據,我需要能夠分配多種類型到它,並相應地做出反應。我使用的數據片段,我需要有效的方式來管理在需要時從文件名加載它們,同時保持相同的代碼,如果我正在使用已加載的數據進行操作。

這將是真棒:

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

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

而SomeDataClass.Data不是字符串類型。

+1

你選錯了語言 – Luis 2012-08-15 07:12:23

+1

讓'Data'輸入'object' ... – 2012-08-15 07:12:48

+1

@Luis是怎麼回事?這並不一定遵循 – 2012-08-15 07:12:56

回答

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; 
    } 
} 
+0

太棒了,謝謝!這將做到這一點。 – Shuun 2012-08-15 07:44:51

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!" 
    } 
} 
+0

我認爲*這個錯過了問題的主旨,即它想要對不同對象類型進行不同的處理。坦率地說,'動態'在這裏增加了什麼都不是'object'完成的。 – 2012-08-15 07:17:12

+0

也許我誤解了。然而,隨着我對這個問題的理解(想要賦予某個屬性的任何值),動態將允許訪問類型方法,屬性等。而對象則需要顯式轉換才能提供此功能。如果我誤解了這個問題,我很抱歉。 – 2012-08-15 07:26:05

0

不知道這個問題你想使用此解決到底是什麼,但它似乎對我來說,你會更好使用byte [],使用從磁盤或其他地方加載的數據流。

也可以考慮只編寫一個通用接口,而不是使用動態和對象。