从我的主代码中我调用了一个类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();
}
}
}
非常感谢!
答案 0 :(得分:1)
这段代码不会编译,对吧?这一行return m1.multiply(int multiplicator);
不合适。您需要定义m1
。我想你正在寻找依赖注入。你可以通过构造函数来做到这一点,所以
class meth2
{
private meth1 _m1;
meth2(meth1 m1)
{
if(m1 == null) throw new ... // check input params
_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;
。它应该是私人的public
,默认情况下班级为internal
。通过这种方式,您可以在单个库外使用它答案 1 :(得分:1)
namespace workingWithClasses
{
public class meth1
{
public int op1;
public int multiply(int mult)
{
return op1 = 44 * mult;
}
}
public class meth2
{
meth1 m1 = new meth1();
public int CallFuncsClass(int multiplicator)
{
return m1.multiply( multiplicator);
}
}
class Program
{
static void Main(string[] args)
{
meth2 m2 = new meth2();
int result_m2 = m2.CallFuncsClass(3);
Console.WriteLine(result_m2);
Console.ReadKey();
}
}
}
答案 2 :(得分:0)
在类meth1上实现乘法静态:
public static int multiply(int mult)
也不要使用'op1',只返回操作的结果。
这样打电话:
return meth1.multiply(int multiplicator);
答案 3 :(得分:0)
这是解决方案
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)
{
meth1 m1=new meth1();
return m1.multiply(multiplicator);
}
}
class Program
{
static void Main(string[] args)
{
meth2 m2 = new meth2();
int result_m1=m2.CallFuncsClass(3);
Console.WriteLine(result_m1);
Console.ReadKey();
}
}
}
答案 4 :(得分:-1)
如果您想从meth1
内meth2
调用meth1
中的方法(不创建multiply()
类型的对象),则需要使using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace workingWithClasses
{
class meth1
{
//note statics
static int op1;
static int multiply(int mult)
{
return op1 = 44 * mult;
}
}
class meth2
{
public int CallFuncsClass(int multiplicator)
{
//access to multiply() is valid here
return meth1.multiply(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();
}
}
}
成为静态。
这将允许它以您正在使用的方式使用:
{{1}}