1.构造函数与析构函数的执行
构造函数是一种用于对象初始化的特殊方法,有以下特点。
–构造函数只能在对象创建时调用,即和new运算符一起被调用。
–构造函数和类具有相同的名字。
–构造函数可以有0个、1个或多个参数。
–构造函数没有返回值。
–可以有修饰符
–每个类至少有一个构造函数,一个类可以有多个构造函数。
–如果没有为类定义构造函数,系统会自动为其定义一个缺省的构造函数。缺省构造函数不带参数,作用是将实例变量都清零。
–一旦为类定义了构造函数,则系统不会再为其定义缺省构造函数。
C#中构造函数有三种:实例构造,私有构造和静态构造
析构函数当对象所在的函数已调用完毕时,系统会自动执行析构函数。它不能带任何参数,也没有返回值(包括void类型)。只能有一个析构函数,不能重载。如果用户没有编写析构函数,编译系统会自动生成一个缺省的析构函数(即使自定义了析构函数,编译器也总是会为我们合成一个析构函数,并且如果自定义了析构函数,编译器在执行时会先调用自定义的析构函数再调用合成的析构函数),它也不进行任何操作。
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
public class A
{
public A()
{
Console.WriteLine("这是A的构造!");
}
~A()
{
Console.WriteLine("这是A的析构!");
}
}
class Program
{
static void Main(string[] args)
{
A a = new A();
Console.WriteLine("程序结束! ");
}
}
}
运行结果:
类
1.封装
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
//一个冰箱类
public class Refrigertor
{
public void open()
{
Console.WriteLine("打开冰箱");
}
public void put(string thing)
{
Console.WriteLine("放入"+thing);
}
public void close()
{
Console.WriteLine("关闭冰箱");
}
}
class Program
{
static void Main(string[] args)
{
//Console.WriteLine("打开冰箱");
//Console.WriteLine("放苹果" );
//Console.WriteLine("关闭冰箱");
Refrigertor re = new Refrigertor();
re.open();
re.put("苹果");
Console.WriteLine("程序结束! ");
}
}
}
运行结果
2.继承
3.多态
抽象类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
//抽象类必须使用关键字abstract
//抽象类中可以有抽象方法也可以有非抽象方法
//抽象方法只能存在与抽象类中,抽象方法只声明不实现
//父类是抽象类的话,其中的抽象方法只能在子类中实现
//抽象方法不能使用private
//抽象类不能被实例化
public abstract class Bag
{
public abstract void eat();
public void dress()
{
Console.WriteLine("MP+10");
}
}
public class BigBag : Bag //BigBag继承Bag
{
//子类实现父类抽象方法需要使用override关键字
//子类必须实现父类中所有的抽象方法
public override void eat()
{
Console.WriteLine("HP+5");
}
}
public