来自对象的C#静态方法

时间:2009-09-14 23:07:54

标签: c#

我有各种不同类型的对象。 对于所有这些,我想调用他们类的静态方法。所有类共享相同的方法。 如何在不显式调用类的情况下调用此静态方法?

6 个答案:

答案 0 :(得分:3)

您可以通过在每个调用相应静态方法的对象中放置一个方法来实现此目的。但是,您想要这样做的事实表明您的设计可能会得到改进。如果你告诉我们你想要完成什么,有人可能会建议一个更好的方法。

答案 1 :(得分:1)

如果这些类都扩展了相同的基类,那么调用基类上的方法就可以了。

例如:

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

public class A: Base
{
}

public class B: Base
{
}

以下方法调用执行相同的代码:

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

答案 2 :(得分:0)

您想要调用每个类的每个方法吗?您必须明确地调用它们,单独引用每个类。

每个类的静态方法是否具有相同的公共代码?将其放入静态类以供所有其他类使用,或创建一个或多个扩展方法。

答案 3 :(得分:0)

你是否正在寻找类似List<object>之类的东西,其中所有对象都保证有一个名为MethodX()的静态方法?

如果是这样,你可以反思它们,找到方法名称,并执行它。

要么像其他提到的那样继承(这将是正确的方法)。

答案 4 :(得分: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(如David所述)

答案 5 :(得分: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");
    }
}