C#学习的心得笔记

入口参数过多时的method求解

2019-10-06  本文已影响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();

        }

上一篇下一篇

猜你喜欢

热点阅读