美文网首页C#学习的心得笔记
入口参数过多时的method求解

入口参数过多时的method求解

作者: 北欧的蓝天 | 来源:发表于2019-10-06 02:00 被阅读0次

    只有三个入口参数还可以通过唯一一个method,输入所有入口参数,如下例:

    static bool IsTeenager(int age, int minAge, int maxAge)

            {

                bool teenager = (age > minAge && (age < maxAge));

                return teenager;

            }

    可是如果入口参数很多很多,像下面这个标准模型里的拉格朗日量方程,就无法用上面的方式求解。

    当入口参数过多时,对于新手可行的解决方式如下:

    e.g. f(x,y,z,w) = ax + by + cz + dw (a,b,c,d都是常数,x,y,z,w都是变量)

    class Calculate

        {

    static private double x; // 将所有的入口参数都创建为Class Calculate的静态变量,开机既有

            static private double y;

            static private double z;

            static private double w;

    /* 为所有入口参数,逐个建立Set赋值方法,都是静态的以便于后面的Main调用,只赋值不用返回值。所以是Void的。CalculateF() 里的参数是空的,具体获取了什么结果,由body内部的公式和参数来决定。*/

    public static void SetX(double x_)

            {

                x = x_;

            }

            public static void SetY(double y_)

            {

                y = y_;

            }

            public static void SetZ(double z_)

            {

                z = z_;

            }

            public static void SetW(double w_)

            {

                w = w_;

            }

    public static double CalculateF() 

            {

                int a = 10;

                int b = 14;

                int c = 8;

                int d = 7;

                double result = a*x + b*y +c*z + d*w;

                return result;

            }

    /* 通过这种方法,不仅可以解决入口参数过多的问题,还可以使公式的设置具有灵活性。因为内部所用到的参数和公式都可以改变。如下例*/

    public static double CalculateG()

            {

                int a = 10;

                int b = 14;

    double result = a * x - b * y;

                return result;

            }

    /* 在主程序中调用Set方法,并打印输出*/

      static void Main(string[] args)  

            {

                SetX(12.02);

                SetY(10.5);

                SetZ(11.8);

                SetW(8.8);

                Console.WriteLine(CalculateF());

                Console.WriteLine(CalculateG());

                Console.ReadKey();

            }

    可是,开过多的静态空间,会导致程序占用内存过多,其实也可以通过实例化Class的方式来解决。

    步骤:

    1)创建一个Class,在Class里写入一些public的方法

    2)在Main主程序中,实例化这个Class,为instance

    3)通过这个实例可以调用Class里的方法。

    4)在入口参数里赋值。注意:入口参数,要与之前定义的方法相匹配,不然会报错。

    instance.methodsOfClass()

    程序如下:

    /* 创建一个含有变量x,y,z,w的Class,叫Cal,将变量都封装为private*/

    class Cal                   

        {

            private double x;

            private double y;

            private double z;

            private double w;

    /* 为每一个变量创建Setter,属性为public*/

            public void SetX(double x_)

            {

                x = x_;

            }

            public void SetY(double y_)

            {

                y = y_;

            }

            public void SetZ(double z_)

            {

                z = z_;

            }

            public void SetW(double w_)

            {

                w = w_;

            }

    /* 创建一个method,属性为public*/

            public double CalculateF()

            {

                int a = 10;

                int b = 14;

                int c = 8;

                int d = 7;

                double result = a * x + b * y + c * z + d * w;

                return result;

            }

    /* 虽然上述methods都不是静态的,也能通过实例化Class Cal的方式来调用Cal里的方法。*/

    static void Main(string[] args)

            {

                Cal firstCal = new Cal();

                firstCal.SetX(10.5);

                firstCal.SetY(12.3);

                firstCal.SetZ(9.8);

                firstCal.SetW(7.2);               

                Console.WriteLine(firstCal.CalculateF());

                Console.ReadKey();

            }

    相关文章

      网友评论

        本文标题:入口参数过多时的method求解

        本文链接:https://www.haomeiwen.com/subject/rsnypctx.html