C#学习的心得笔记

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

2019-10-05  本文已影响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就不是一个好方法,要通过其他的方式来求解。详见另一篇文章。

上一篇下一篇

猜你喜欢

热点阅读