Main主程序调用的可能报错原因
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就不是一个好方法,要通过其他的方式来求解。详见另一篇文章。