从另一个类方法调用类方法
从另一个类方法调用类方法
我从我的主代码中调用一个类meth2
的方法,该方法调用另一个类meth1
的方法。对我来说,尊重这个结构很重要。
这些方法对之前在类中定义的值进行赋值,但是在我的命令窗口中无法得到正确的结果(只是0
而不是132
)。我想我可能漏掉了什么。
有人有想法吗?以下是代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace workingWithClasses { class meth1 { public int op1; public int multiply(int mult) { return op1 = 44 * mult; } } class meth2 { public int CallFuncsClass(int multiplicator) { return m1.multiply(int multiplicator); } } class Program { static void Main(string[] args) { meth1 m1 = new meth1(); meth2 m2 = new meth2(); m2.CallFuncsClass(3); int result_m1 = m1.op1; Console.WriteLine(opm1); Console.ReadKey(); } } }
非常感谢!
在上述代码中,我们可以看到有一个类方法 `multiply`,它接受一个参数 `mult`,并返回一个整数值。但是,在调用该方法时,它是通过另一个类方法 `meth1` 来调用的。
问题的出现原因是,我们试图从一个类方法中调用另一个类方法,但是我们没有正确地引用和调用方法。
要解决这个问题,我们需要做两件事:
1. 将 `multiply` 方法设置为静态方法。这样,我们可以直接通过类名调用该方法,而无需创建类的实例。我们可以将 `multiply` 方法声明为静态方法,如下所示:
public static int multiply(int mult)
2. 修改调用 `multiply` 方法的代码。我们应该使用正确的语法来引用和调用 `multiply` 方法。我们可以像下面这样调用 `multiply` 方法:
return ClassName.multiply(multiplicator);
这样,我们就可以正确地从一个类方法中调用另一个类方法了。通过将 `multiply` 方法设置为静态方法,并使用正确的语法来引用和调用方法,我们可以解决这个问题。
问题:从另一个类方法调用类方法的原因是什么?解决方法是什么?
在给定的代码中,return m1.multiply(int multiplicator);
这一行代码放错了位置。需要先定义m1
是什么。我猜你想要进行依赖注入。你可以通过构造函数实现这一点,所以代码应该如下:
class meth2 { private meth1 _m1; meth2(meth1 m1) { if(m1 == null) throw new ... // 检查输入参数 _m1 = m1; } public int CallFuncsClass(int multiplicator) { return _m1.multiply(int multiplicator); } }
使用方法如下:
meth1 m1 = new meth1(); meth2 m2 = new meth2(m1); m2.CallFuncsClass(3);
额外的注意事项:
- 正确命名你的类,不要使用meth1
这样的名称,应该使用Calculator
之类的名称
- 不要使用公共字段:public int op1;
,应该使用私有字段
- 通常你希望你的类是公共的,默认情况下类是internal
的。这样可以在单个库之外使用它
- 检查参数的正确值,如果有错误则抛出异常
问题的出现原因:在meth2类的CallFuncsClass方法中,想要调用meth1类的multiply方法,但由于meth1类的实例化是在meth2类的成员变量中进行的,因此无法直接通过meth1类的类名来调用multiply方法。
解决方法:需要先创建meth1类的实例对象,然后通过该对象来调用multiply方法。
整理成文章如下:
在上述代码中,我们可以看到有两个类meth1和meth2,meth1类中有一个multiply方法用于进行乘法运算,而meth2类中的CallFuncsClass方法想要调用meth1类的multiply方法并进行运算。
然而,在meth2类的CallFuncsClass方法中,我们发现meth1类的实例化是在meth2类的成员变量中进行的,因此无法直接通过meth1类的类名来调用multiply方法。这就导致了问题的出现,我们需要找到解决方法。
解决方法就是需要先创建meth1类的实例对象,然后通过该对象来调用multiply方法。在上述代码中,我们可以看到在meth2类的成员变量中创建了一个meth1类的实例对象m1。然后在CallFuncsClass方法中,我们通过该对象m1来调用multiply方法,实现了meth2类调用meth1类的multiply方法的目的。
通过以上的解决方法,我们可以成功调用meth1类的multiply方法,并得到正确的运算结果。