2015-04-02 67 views
1

我使用wcf接收對象,每個對象都不同,我想爲每個接收到的對象創建一個對象,以便我可以操作它,將每個接收的對象傳遞/複製到一個每次都是無形的物體。它有這樣的事情嗎?c中的「無形」對象#

的僞代碼示例:

Shapeless_object = received_obj_A; 
if (Shapeless_object.name = "I_dont_know") { 
    Shapeless_object.count++; 
} 

Shapeless_object = received_obj_B; 
if (Shapeless_object.name = "I_dont_know_too") { 
    Shapeless_object.count--; 
    Shapeless_object.age = 20; 
} 

received_obj_A和B是不同的參數 但在一個單一的對象傳遞不同。我希望我儘可能明確地提出我的問題。

回答

3

你提到WCF的起源:它很容易通過partial class添加接口到WCF類型:只需要聲明的通用接口 - 也許是:

interface ICommon { 
    string name {get;} 
    // ... 
} 

然後告訴編譯器來推斷界面爲每個WCF類型:

namespace TheWcfNamespace { 
    partial class SomeWcfType : ICommon {} 
    partial class AnotherWcfType : ICommon {} 
    partial class WhateverWcfType : ICommon {} 
} 

只要SomeWcfType等都成員實現接口,你現在可以把你所有的WCF對象作爲ICommon


或者,你也許可以做你想要的這裏通過dynamic - 只是dynamic取代Shapeless_object - 然而,這似乎意圖的濫用。這裏的一個比較經典的實現是接口:

if(obj is IDontKnow) { 
    // TODO: access as an IDontKnow 
} 

if (obj is IDontKnowToo) { 
    // TODO: access as an IDontKnowToo 
} 

當然你也可以用上面提到的partial class態度結合起來這一點。

+0

@user相反:在服務器上有**無需**的'partial',因爲你控制的起源類型;它對於生成的類型是特別有用的 - 我討厭這麼說,但是'partial class'已經創建了**,可以幫助您對生成的(WSDL等)類型進行調整(無需編輯生成的內容) – 2015-04-02 07:16:48

+0

哇,謝謝!你的回答就在我的頭上!雖然它看起來是正確的。動態選項似乎爲我工作! – Ctrlfreak 2015-04-02 07:37:19

1

您可以將它們投射到dynamic,但這會是一次性能打擊。

dynamic shapeless = received_obj_A; 
if (shapeless .name = "I_dont_know") { 
    shapeless.count++; 
} 

shapeless = received_obj_B; 
if (shapeless.name = "I_dont_know_too") { 
    shapeless.count--; 
    shapeless.age = 20; 
} 

請注意,您確實會丟失靜態打字。

+0

嘿謝謝你!它可以工作,但我需要在每一次接收中都投入「動態」。因此,如果有'var a = received_obj_A;'和'var a = received_obj_B'選項,'dynamicless shapeless = received_obj_A;'和'dynamic shapeless = received_obj_B;' – Ctrlfreak 2015-04-02 07:39:03

0

你的意思是?

var a = received_obj_A; 
if (a.name = "I_dont_know") { 
    Shapeless_object.count++; 
} 

var b = received_obj_B; 
if (b.name = "I_dont_know_too") { 
    Shapeless_object.count--; 
    Shapeless_object.age = 20; 
} 

不要在這裏使用的基本對象,因爲你需要檢查的實例,並且嘗試投它。

不要做:

object a = received_obj_A; // Here you need to cast 

if (a.name = "I_dont_know") { 
    Shapeless_object.count++; 
} 

object b = received_obj_B; // Here you need to cast 
if (b.name = "I_dont_know_too") { 
    Shapeless_object.count--; 
    Shapeless_object.age = 20; 
} 
+0

@an這就是答案。 – Ctrlfreak 2015-04-02 07:40:54

+0

好的,非常感謝您的幫助。 – anon 2015-04-02 07:59:45