2010-12-14 66 views
1

我需要傳遞從不同類實例化的不同對象,它們具有相同名稱的函數,並且我想調用該函數。錯誤:'object'不包含'methodName'的定義

例如:

Class1 object1; 
Class2 object2; 
Class3 object3; 

Object object = object1; 
object1->functionname(); 

Object object = object2; 
object2->functionname(); 

Object object = object3; 
object3->functionname(); 

這不是在C#中可能...

在PHP這是很簡單的,你可以只是像上面,但在C#中我得到這個錯誤的樣本對象做:錯誤:'object'不包含'methodName'的定義

我雖然在對象對象上調用任何方法名是合法的!因爲它不知道里面到底是什麼。

我該怎麼做?

+3

PHP是動態(鴨)類型,C#是靜態類型... – 2010-12-14 20:06:47

回答

3

創建一個兩個類都實現的接口。
然後通過你的接口類型對象傳遞給你的函數:

interface IAnimal 
{ 
    void Speak(); 
} 

class Cat : IAnimal 
{ 
    public void Speak() 
    { 
     MessageBox.Show("Meow!"); 
    } 
} 

class Dog : IAnimal 
{ 
    public void Speak() 
    { 
     MessageBox.Show("Woof!"); 
    } 
} 


static class Program 
{ 

    static void SpeakPlease(IAnimal animal) 
    { 
     animal.Speak(); 
    } 
//... 
} 
3

I though it's legal to call any method name on a object object! since it doesn't know what is really inside.

不,這是非法從上Object本身中定義的除了調用任何方法。也許你正在考慮dynamic

但是相反,我認爲你應該創建一個通用接口。

interface IProcessable 
{ 
    void Process(); 
} 
0

c#是靜態類型的:它在代碼編譯時查找方法名,而不是在運行時查找。 object沒有該方法名稱,因此您無法期望調用該函數。

相關問題