从另一个类方法调用类方法

时间:2014-01-30 10:08:12

标签: c# class

从我的主代码中我调用了一个类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();
        }
    }
}

非常感谢!

5 个答案:

答案 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)

如果您想从meth1meth2调用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}}