2017-03-29 28 views
0

我有3類: -如何通過任何類對象作爲參數傳遞給方法

public Class Example1 
{ 
    public void Method1() 
    { 
    } 
    public void Method2() 
    { 
    } 
} 

public Class Example2 
{ 
    public void Method3() 
    { 
    } 
    public void Method4() 
    { 
    } 
} 

public Class CompletelyDifferentClass 
{ 
    public void DifferentMethod(Example1/Example2 obj) 
    { 
     obj.Method1(); //if object is passed for Example1 
     obj.Method3(); //if object is passed for Example2 
    } 
} 

如果我們看到CompletelyDifferentClass和公共DifferentMethod(例1 /例題OBJ)

我想DifferentMethod得到參數因爲任何時候我都可以發送Example1對象或Example2對象。 如果發送Example2對象,它應該啓用Example2的方法,如obj.Method3();

這是不固定的,我將作爲參數發送到該方法的哪個類的對象。

我怎麼能寫DifferentMethod

+0

如果你不知道在編譯時間參數傳遞的對象的類型(類型'object')那麼你需要閱讀[Reflection](https://msdn.microsoft.com/en-us/library/mt656691.aspx)。 – InBetween

+2

也許使用'is'運算符或'as'運算符?但這聽起來像重載會更好。這聽起來像是一個X-Y問題,並不清楚它與ASP.NET有什麼關係。 –

+0

[還有很多](https://www.google.com/search?q=method+parameter+different+types+c%23) –

回答

0

代碼你可以寫一個基類,然後從該基類繼承你的子類。

然後,您可以傳遞從同一個類繼承的任何類型的子類。像

public class myBase{ 

} 

public class A: myBase{ 

} 

public class B: myBase{ 

} 

public static void myFunction(myBase obj){ 

} 

而且你可以通過任何兒童類烏爾基類像

myFunction(A); 
myFunction(B); 

另一種方法是使用方法重載。您可以使用相同的簽名編寫相同的函數。 This是一個很好的閱讀函數重載

也可以把對象作爲參數類型。更妙的是,也許是使用泛型:

void MyFunction<T>(T parm) { 

} 

希望它能幫助:)

+1

你如何調用不同的方法來做這件事? – Pikoh

相關問題