从另一个班级

时间:2018-03-07 04:11:04

标签: c#

在c#中有没有办法从另一个类调用公共方法而不实例化它的实例?

class ClassA{

   public void callMe(){
      //something...
   } 

} 

class ClassB{

   public void WannaCallYou(){
      //here I want to call ClassA's callMe()
   } 

} 

3 个答案:

答案 0 :(得分:3)

使用静态关键字

public class ClassA
{
   public static void CallMe(){
   }
}

public class ClassB
{
   public void WannaCallYou(){
       ClassA.CallMe();
   }
}

答案 1 :(得分:0)

public class ClassA
{
    static ClassA singleton = null;

    public static ClassA GetInstance()
    {
        if (singleton == null)
            singleton = new ClassA();
        return singleton;
    }

    public void CallMe()
    {
    }
}

public class ClassB
{
   public void WannaCallYou()
   {
       ClassA.GetInstance().callMe();
   }
}

如果你不能使它静止,你可以尝试这样做。 实例化一个静态ClassA,并让它调用GetInstance。

答案 2 :(得分:0)

这是你想要的吗?

public class ClassA
{
    public void CallMe();
}

public class ClassB
{
    public void WannaCallYou(ClassA a)
    {
        a.CallMe();
    }
}

或者您想使用私人字段吗?

public class ClassB
{
    private ClassA a;
    public ClassB(ClassA a)
    {
        this.a = a;
    }
    public void WannaCallYou()
    {
        a.CallMe();
    }
}

面向对象编程的基本概念是封装。类不仅应封装描述对象的数据,还应封装 all 处理数据所需的方法。将一个类看作一个公文包,不仅包含论文(数据),还包含铅笔和橡皮和统治者以及用于填充论文数据的所需的任何其他内容(方法)。

所以在你的情况下,盲目地调用方法CallMe()而不先获取公文包(ClassA的实例)是违反规则的。一旦你引用了ClassA,那么调用它的方法或读取它的数据就变得微不足道了。