怎么样能被定义为函数呢,其实也就是把一些重复的操作,专门放在一个地方/代码块里面,需要用到的时候在调用就可以了,特定类型的函数称为方法。
函数的好处呢,提高代码的可读性,函数可以创建多用途的代码
static void Write(){
Console.WriteLine("这是write函数");
}static void Main(string[] args){Program.Write();Console.ReadKey();
}
//定义函数的时候必须适用圆括号
//函数名:PascalCasevoid就是一个,当函数返回一个值时。不能使用void。使用return结束函数的执行,把返回值给调用的
static returntype functionname ()=>形参是函数定义的一部分,而实参则有调用代码传递给函数。
(paramtype paramname)这种形式
调用参数时,必须是提供的参数和函数定义的参数完全匹配
关于参数数组,只能指定一个,这个参数必须位于函数定义当中参数的最后一个,可以允许使用个数不定参数来调用。params type[] paramsname。
在使用参数的时候,是把一个值参数传递给一个函数所使用的变量,在函数中对此变量的任何修改都不影响函数调用中指定的参数。
ref参数,和out参数,在前面方法中提到了
把未赋值的变量用作ref参数时非法的,但可以使用未赋值的变量out参数,在函数中使用out参数,把它看作未赋值的
从函数返回多个值用怎样的方法呢,out参数,结构,数组?如果需要用代码来创建,初始化,引用和读写,就应该考虑元组了。
var numbers={1,2,3,4,5}考虑局部作用域和全局作用域的含义,在一个代码块内部,外部为什么不能调用。
局部作用域可以有相同的名称,不会相互干涉
main函数作为c#应用程序的入口点,执行这个函数就是执行应用程序,也就是main函数结束,整个应用程序也就结束。
struct CustomerName{
public string firstName;
}委托是一种储存函数引用的类型。委托的声明类似于函数,但不带函数体,要是用delegate关键字。委托的声明包含一个返回值和参数列表。
//嵌套类
//在c#中可以将一个类的定义在另一个类的内部
//外面的类叫外部类,内部的类叫嵌套类
//外部类和内部类之间可以相互访问
//new 外部类.内部类()可以创建内部类的对象
//非静态类访问需要创建类对象
//静态成员可以之间访问或通过类名访问,
//外部类
class Ab{
//内部类
class Ba{
}
}
internal class Program{static void Main(string[] args){OuterClass.InnerClass innerclass=new OuterClass.InnerClass();innerclass.Show();OuterClass outerClass=new OuterClass();outerClass.Print();Console.ReadKey();}}//外部类class OuterClass{public string name = "OuterClass";//如果静态成员,如果非静态成员public void Print() {Console.WriteLine($"{name}");//Console.WriteLine($"{InnerClass.name}");Console.WriteLine($"{new InnerClass().name}");}//内部类public class InnerClass{public string name= "InnerClass";//如果静态成员,如果非静态成员public void Show() {Console.WriteLine($"{name}");// Console.WriteLine($"{OuterClass.name}");Console.WriteLine($"{new OuterClass().name}");}}}
//匿名类
//如果某个类的实例对象只会使用一次,可以使用匿名类的方式创建这个对象。
//不需要定义类,我们就可以创建一个对象
//这样的类一般用于存储一组只读数据
var p=new {Name="zhangsan",Age=18};
#region
//this
//定义:this关键字主要指的是调用者本身,调用者当前对象
//区分成员字段和局部变量
//调用其他构造函数
class Student{
public int id;
public string name;
public Student(){
Console.WriteLine("无参构造函数")
}//无参构造函数
//this可以指向当前对象的另一个构造函数
public Student(int id,string name):this(){
//this代表当前对象,也是赋值的对象student
this.id=id;
this.name=name;
Console.WriteLine("有参构造函数")
}
}Student student = null;student = new Student(100,"zhangsan");#endregion
//static
//如果使用static修饰函数该函数就是静态函数,如果不修饰就是非静态函数
//静态函数可以直接使用类名调用,非静态函数必须使用对象调用class MyMath{public static double GetAtea(double x){return x * x*3.14;}}
//静态函数可以直接使用类名调用Console.WriteLine(MyMath.GetAtea(10));Console.ReadKey();
//静态函数:静态函数中使用的静态字段
//静态字段:静态字段的初始化最好放在静态构造函数中
//静态属性:静态字段的属性一定是静态属性
//静态构造函数:主要用于静态字段的初始化,类加载的时候自动调用,不需使用new关键字调用
//静态类:所有的成员都是静态的类称之为静态类//运算符重载指的是给特定的运算符指定新的运算规则class Vector{private int x;private int y; private int z;//运算符重载,当运算符重载的是条件运算符的时候不允许成对出现public static bool operator==(Vector a, Vector b){return a.x==b.x&&a.y==b.y&&a.z==b.z;}public static bool operator !=(Vector a, Vector b){return a.x != b.x || a.y != b.y || a.z != b.z;}//运算符+public static Vector operator +(Vector a, Vector b){return new Vector(a.x + b.x , a.y + b.y , a.z + b.z);}public Vector(){}public Vector(int x, int y, int z){this.x = x;this.y = y;this.z = z;}public void GetArea(){Console.WriteLine($"x={x},y={y},z={z}");}}static void Main(string[] args){Vector v = new Vector(1,2,3);Vector v1 = new Vector(3,2,1);Vector v2 = new Vector(3,2,1);v.GetArea();v1.GetArea();Console.WriteLine(v == v1);//falseConsole.WriteLine(v != v1);//trueConsole.WriteLine(v1==v2);//false//为什么呢,比较的是地址,所以用运算符重载,改成比较的是值Vector v5=new Vector(7,7,7);Vector v6= new Vector(8,8,8);Vector v4=v5+v6;v4.GetArea();Console.ReadKey ();