2009-09-14 56 views
0

我有不同類型的各種對象。 對於所有這些人,我想調用他們的類的靜態方法。所有的類都有相同的方法。 如何在不顯式調用該類的情況下調用此靜態方法?來自對象的C#靜態方法

+0

你能否給我們更多的背景知識? – 2009-09-14 23:30:36

回答

0

你想調用每個類的每個方法嗎?你必須明確地調用它們,分別引用每個類。

每個類的靜態方法是否有相同的通用代碼?把它放到靜態類中供所有其他類使用,或創建一個或多個擴展方法。

1

如果這些類都擴展相同的基類,那麼調用基類的方法將工作。

例如:

public class Base 
{ 
    public static DoSomething() 
    { 
    //something 
    } 
} 

public class A: Base 
{ 
} 

public class B: Base 
{ 
} 

下面的方法調用執行相同的代碼:

A.DoSomething(); 
B.DoSomething(); 
Base.DoSomething(); 
3

你可以通過把一個方法調用相應的靜態方法每個對象做到這一點。然而,你想這樣做的事實表明你的設計可能會有所改進。如果您想告訴我們您要完成的任務,有人可能會提出更好的方法。

0

你是否在尋找像你這樣的東西有類似List<object>其中所有的對象都保證有一個名爲MethodX()的靜態方法?

如果是這樣你可以反思他們,尋找方法名稱,並執行它。

或者像其他人提到的那樣或繼承(這將是正確的方法)。

0

如果你需要爲每種類型都有一個特定的實現,我不認爲靜態方法是正確的方法......相反,你應該定義一個由所有類實現的接口。然後,您可以調用接口中的每個對象上定義的實例方法:

public interface IDoSomething 
{ 
    void DoSomething(); 
} 

public class A: IDoSomething 
{ 
    public void DoSomething() 
    { 
     // implementation for A 
    } 
} 

public class B: IDoSomething 
{ 
    public void DoSomething() 
    { 
     // implementation for B 
    } 
} 

當然,如果你需要爲每一個類型,那麼你可以調用Base.DoSomething具體的實現(如戴維解釋)

0

我不確定你到底想要做什麼。但用我的想象力,我想出了這個實現。

internal class Program 
{ 
    private static void Main(string[] args) 
    { 
    var staticMethodClasses = new List<StaticMethodClassBase> 
             {new ClassA(), new ClassB()}; 

    foreach (StaticMethodClassBase item in staticMethodClasses) 
    { 
     Type t = item.GetType(); 
     MethodInfo staticMethod = 
      t.GetMethod("DoSomething", BindingFlags.Static | BindingFlags.Public); 
     staticMethod.Invoke(null, null); 
    } 
    } 
} 

public abstract class StaticMethodClassBase 
{ 
} 

public class ClassA : StaticMethodClassBase 
{ 
    public static void DoSomething() 
    { 
     Console.WriteLine("Class A"); 
    } 
} 

public class ClassB : StaticMethodClassBase 
{ 
    public static void DoSomething() 
    { 
     Console.WriteLine("Class B"); 
    } 
}