Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从另一个类调用公共方法_C# - Fatal编程技术网

C# 从另一个类调用公共方法

C# 从另一个类调用公共方法,c#,C#,在c#中,有没有一种方法可以从另一个类调用公共方法而不实例化它的实例 class ClassA{ public void callMe(){ //something... } } class ClassB{ public void WannaCallYou(){ //here I want to call ClassA's callMe() } } 使用静态关键字 public class ClassA { public

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

class ClassA{

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

} 

class ClassB{

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

} 
使用静态关键字

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

public class ClassB
{
   public void WannaCallYou(){
       ClassA.CallMe();
   }
}
如果你不能使它静止,你可以试着用这种方法。 实例化一个静态类,并让它调用GetInstance。

这就是您想要的吗

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();
    }
}

面向对象编程的一个基本概念是封装。类不仅应该封装用于描述对象的数据,还应该封装对数据进行操作所需的所有方法。把一个类想象成一个公文包,里面不仅有纸(数据),还有铅笔、橡皮擦、尺子,还有你需要的任何东西(方法)来用数据填充文件


因此,在您的情况下,在没有获得公文包的情况下盲目调用方法
CallMe()
(一个
ClassA
)是违反规则的。一旦您有了对
ClassA
的引用,那么调用它的方法或读取它的数据就变得很简单了。

使它成为静态的。这可能不是做你正在做的事情的正确方法,除非它是某种无状态助手方法。是的,我想到了,但我不能使它成为静态的。我想知道是否有一种方法不使用static@Matahari:不使用静态的任何具体原因?您的实际需求是什么?您需要对
ClassA
的引用才能访问其方法。顺便说一句,请使用标准命名约定,并将方法
callMe()
转换为
callMe()
public class ClassB
{
    private ClassA a;
    public ClassB(ClassA a)
    {
        this.a = a;
    }
    public void WannaCallYou()
    {
        a.CallMe();
    }
}