美文网首页C#学习的心得笔记
Main主程序调用的可能报错原因

Main主程序调用的可能报错原因

作者: 北欧的蓝天 | 来源:发表于2019-10-05 09:35 被阅读0次

    Main是class下的方法。Main里的变量和小程序里的变量,并不相同,即便同名(是两个不同的盒子)。

    同理:Class里的变量和Class以外的方法里的变量也不一样,即便同名。

    但是Class里的变量和Class自带的方法里的变量可以是一样的(同一个盒子里的同一个东西)。

    class Program

        {

            static private double x;

            public static void SetX(double x_)

            {

                x = x_;

            }

    所有Class都是静态的,但是Class的实例instance是动态的。

    Class是个模板,可复制成不同的实例,实例的赋值彼此不同。

    Eg. 使馆申请护照的表格,我和赵各一份,就是两个实例。

    所有的静态Class/程序/值的生命周期跟应用等长,从应用启动到关闭,一直存在。(占内存,是否设置静态要严肃对待。)

    因此,静态Class/程序/值可以被任何方法和变量调用。

    主程序Main要被虚拟机调用,生命周期与应用等长,所以Main必须是静态的,能被Main直接调用的methods,也必须是静态的。

    Main可以直接调用其他方法,而不是方法里的值。因此:Methods,要放在Main的body之外,否则就会报错。

    被调用的方法可以不赋实际值,而在main中调用方法时,再赋值。

    方法其实就是类似于公式,只有被使用时才需要赋值。如果使用时,不赋值,也会报错。

    可以在一个功能内调用别的功能。这样就可以 把功能给细化。一个大功能,实际上是很多个子功能的组合。子功能也能被重复使用。编程的重要思想之一就是重复使用性,重复使用设计的好,可维护性也得到了提高。

    class Program

        {      static void Main(string[] args)

            {  Console.WriteLine(CalculateAverage(18, 22));

                Console.ReadKey();

            }

            static int CalculateAverage(int a, intb)

            {

                intaverage = SumOfAge(a,b) / 2;

                returnaverage;

            }

            static int SumOfAge(int a, intb)

            {

                intSum = a + b;

                returnSum;

            }

         }

    在Class的body里只能存放变量属性,声明变量,但是不能改变变量的值,不能执行任何function,不然就会报错。

    e.g.

    class Program

        {

            int age = 22 + 14; // 虽然貌似赋值,实际是声明了一个值为22+14的变量age,所以不会报错

            age = 28;  // 此处会报错,因为更改了变量age的value,相当于做了一个赋值,是错误的

            Console.WriteLine(age);  // 此处必然会报错,因为method不可以放到class的body中

                }

    method中可能出现的报错:

    static double AreaOfRound(double radius, float pi)  //  定义method,必要包含所有入口参数,开内存空间

            {

                float pi = 3.1415926;  // 此处必然会报错,等于在内存中又开了一个空间放一个同名的float pi

                pi = 3.1415926f;     // 因为入口参数已经定义过了,不需要再开内存,直接赋值给 pi 就行了

                double Area = radius * radius * pi;

                return Area;

            }

    不可以在method的body里定义入口参数,必须要在第一行的主体句里写入入口参数

    以下是错误例子:

    static bool IsTeenager()  

            {

                int age;

                int minAge;

                int maxAge;

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

                return teenager;

            }

    应该改为

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

            {

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

                return teenager;

            }

    但是当入口参数过多时,单一method就不是一个好方法,要通过其他的方式来求解。详见另一篇文章。

    相关文章

      网友评论

        本文标题:Main主程序调用的可能报错原因

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