C#语法中八武器(8种方法)
方法(Method)的定义:
方法是一个已命名的语句集。可以将方法视为函数或者子程序相似的东西。每个方法
都有一个名称和一个主体,方法主体包含了调用方法时实际执行的语句。可以为大多数方法提供一些数据来进行处理,并让它返回一些信息(通常是处理结果)。方法是一种基本的、功能强大的编程机制。
现已学的C#的8种方法:
1.一般的方法:
a.返回类型方法:
格式:方法类型 方法名( 参数《可以没有参数》){return ;}
b.无返回类型方法:
格式:void 方法名(){执行代码}
2.构造函数(方法):
a.结构的构造函数:
结构(struct)是值类型的(轻量级)。其值是可以拷贝的。存放在栈上,结构的构造函数必须有有参数,如要生成没有参数的结构函数只能是系统来生成的缺省结构函数,自己无法生成,结构的构造函数不会自动初始化字段,
格式: public 结构的名字(参数) { 需要初始化的变量 }
构造函数名必须和结构名相同
b.类的结构函数
类(class)是引用类型的(重量级),其值是不能拷贝的,拷贝的是引用(地址)。存放在堆上,类的构造函数可以没有参数(类名()),系统不会自动生成缺省结构函数,类的构造函数会自动初始化字段,
格式: public 类的名字 (参数) {需要初始化的变量}
构造函数名必须和类名相同
c. 抽象类的结构函数:
格式: public 类名(){需要初始化的变量}
构造函数名必须和抽象类名相同
例: B a = new B();
不能实例化抽象类,所以只能实例化子类。用子类去调用抽象类的方法。
string aa = " ";
string e = a..bb(aa); 或省略string aa= ” ”; 直接string e = a.bb(“aa”);
因为参数aa是string类型,所以在执行方法参数也要是string类型。方法执行时bb.(aa)
里的aa参数必须是实参,必须要赋值。
public abstract class A
{public static string a;
可以使用静态关键字生成变量,但子类是无法调用的。
public A()
{ }
抽象类的构造函数
public abstract string bb(string aa);}
抽象方法
public class B : A
{public override string bb(string aa)
{ return "";}
3.析构函数(方法):
功能:对象的铲除由析构函数来铲除。
格式:~ 类名(){}
特征:析构函数不能有参数,不能任何修饰符而且不能被调用。
注意:不能在结构中声明析构函数。
class Tally
public Tally( )
构造函数
{instanceCount+ +;}
~Tally( )
析构函数
{instanceCount- -;}
强制启动垃圾回收器的方法:system.GC.collect();
当垃圾回收器开始工作,你的程序的其他线程都会停下来。尽量避免使用析构函数。
4.静态方法:
Static(静态关键字)
格式:public static 方法的类型 方法名(参数){}
作用:需要经常重复使用的内容会使用static。
注意:加上static关键字的方法是密封且不可继承的。
5.隐藏方法:
继承中new (关键字)
功能:如果基类和子类中有2个同样的名字的方法,而此时子类的同名方法是自己的方法,并不是调用基类,为了可以区分2个方法,可以用new关键字来隐藏基类的同名的方法。实现使用子类里自己的方法。
格式:public void fun( ){} 调用基类的方法名;
public new void fun( ){} 子类的方法名;
注:如果在子类里使用了new关键字,那就无法再去调用同名的基类的方法。
6.虚方法:
Virtual(关键字)
功能:实现基类调用子类的方法。
只有在基类才能使用(可以没有overiide),如果在基类里有virtual,但在子类里没有override则表示基类方法可以被调用覆盖,但现在不需要覆盖,如果需要可以在子类里添加override。
格式:public virtual void fun(){}
Override (关键字)
只有在子类才能使用,出现override必须要有virtual.
格式:public override void fun(){}
注:virtual和override两个方法名称完全相同。
virtual和override两个方法具有相同的访问限制。
virtual用在基类的方法里,override用在子类的方法里。
7.抽象方法:
特征:抽象方法是隐式的虚方法。
只允许在抽象类中使用抽象方法声明。
抽象方法声明不提供实际的实现,所以没有方法体。
方法声明只是以一个分号结束,并且在签名后没有大括号{}(没有方法体)
实现由一个重写方法override提供,此重写方法是非抽象的一个成员。
在抽象方法声明中使用static或virtual修饰是错误的。
格式:public abstract 方法名( ); 没有{}
注:抽象方法声明是无法执行方法体,所以方法体只能在抽象类的子类里去执行。
8.密封方法:
功能:针对虚方法(必须出现virtual)到此为止,无法再被重写。密封方法(sealed方法)是这个方法的最后一次实现。
格式:public sealed override void 方法名( ){}
注意:密封方法不一定需要放在密封类内里。
现已学的C#的4大类:
1.一般类:
格式:class 类名{}
2.静态类:
Static(关键字)
格式:static class 类名{}
作用:需要经常重复使用的内容会使用static。
注意:里面的所有成员都是静态的,都需要加上static关键字,是密封且不可继承的。
3.抽象类:
Abstract (关键字)
格式:abstract class 类名{}
特性:抽象类不能实例化。(不能创建对象 即无法使用new命令指定对象)
抽象类可以包含抽象方法,也可以包含其他方法。
不能用sealed修饰符修改抽象类,这意味这抽象类不能被继承。(不能为子类)
从抽象类派生的非抽象类必须包括继承的所有抽象方法的实现。(只能为基类)
4.密封类:
Sealed (关键字)
格式: sealed class 类名{}
功能:继承到此为止,无法再被继承。
特征:可以组织一个类成为基类。(结构为密封类)
注意:结构默认为sealed,任何情况下不能从结构继承。