2012-05-14 40 views
0

有什麼方法從函數返回對象。棘手的部分是對象可以是任何類型。我想要一個函數來處理來自會話的返回對象。因此,我想要返回的對象可能是一分鐘的產品,但接下來我可能會想要在下一分鐘返回一位客戶。是否有可能或將不得不做一個函數來返回每種類型。從函數返回任何類型的對象

+1

注意:第一次返回Product,然後是下一個Customer的函數可能是一個非常糟糕的設計。至少從定義上來說,這兩件事情完全不同。 (除非它們都擴展/實現相同的接口,在這種情況下,你可以聲明你的函數返回它。) – cHao

+0

http:// benohead。com/create-anonymous-types-at-runtime-in-c-sharp/ –

回答

3

是的,你可以返回類型對象。但是,您需要在調用者中投放結果以使用任何遠程有用的結果。

static object CarFactory(){ 
    return new Car(); 
} 

static void Main(){ 

    Car car = (Car)CarFactory(); 

    /* do stuff with car */ 
    car.Crash(); 
} 

這是使用仿製藥,因爲它提供了類型安全抽象的理想水平的標準...

0

如果你的方法返回一個對象,你可以回到你的任何對象想。

6
  1. 返回object這是最高等級。
  2. 使方法通用。
  3. 返回dynamic(感謝@AustinSalonen)

public T Foo<T>(T obj) 
{ 
    var variable = GetTFromFooElse(); 
    return variable; 
} 

public dynamic Foo() 
{ 
    var variable = GetSomethingFromFooElse(); 
    return variable; 
} 
+0

這些答案只是推動投射 - 並沒有真正解決問題更深的問題 –

+0

@DaveBish。哪個?我認爲通用答案是所有ORM框架中使用的內容...... – gdoron

+0

會話訪問。 –

0

你的方法可以返回一個對象,但你必須爲你想,當你調用該對象轉換它。

1

根據你的使用cade,而不是使用對象,也許你可以使用generics的呢?

有一個類Session<T>與方法

T GetResult() 

您可以將化妝情況是這樣的:

var x = new Session<Product>(); 
var y = new Session<Customer>(); 

這樣你得到一些很好的類型安全。

1

在這種情況下,你最好通過某種服務/ Api來包裝你的會話類。

例如:

public static class SessionAccess 
{ 
    public static Something SomethingSession 
    { 
     get 
     { 
      return Session["Something"] as Something; 
     } 

     set 
     { 
      Session["Something"] = value; 
     } 
    } 
} 

有一個一致的會話訪問機制是很重要的,以避免意外失步了相同的會話密鑰,並確保它總是相同的基本數據類型。