面向对象编程——.NET
万物皆对象
- 属性和字段
包含在对象中的不同数据构成了对象的状态。字段和属性都可以键入,可以把信息存储在字段和属性中。但是,一般情况下,在访问状态时最好提供属性,而不是字段,这样可以更好的控制各种行为。 - 方法
"方法"用于表示对象中的函数,这些函数调用方式与其他函数相同,使用返回值和参数方法也相同。
对象的生命周期
- 构造阶段:第一次实例化该对象,初始化对象。
- 析构阶段:在删除一个对象时需要执行一些清理工作(释放内存等)
构造函数:
对象的初始化过程是自动完成的。不需要自己去寻找适于存储新对象的空间。但是有时候在对象初始化时需要执行一些额外的工作。例如:初始化对象的存储数据。
所有类都至少包含一个构造函数
static void Main(string[] args)
{
MyClass mc = new MyClass();
//此时会输出666
}
class MyClass
{
public MyClass()
{
Console.WriteLine("666");
}
}
析构函数:
一般情况下,不需要写,但是,在删除对象时需要完成一些操作,就应该去写具体的析构函数
静态
静态关键字:static
静态成员可以在类的实例之间共享,所以可以将他们看成类的全局对象。静态属性和静态字段它可以访问独立于任何对象实例的数据。静态方法可以执行与对象相关、但与对象实例无关的命令。在使用静态成员时,甚至可以不用实例化对象。例如:
Console.WriteLine("666");
OOP技术
Object-Oriented Programming
接口
接口是把公共实例(非静态)方法和属性组合起来,以封装特定功能的一个集合。
接口不能单独存在,接口不能包含实现其成员的任意代码,而只能定义其本身。
static void Main(string[] args)
{
MyClass mc = new MyClass();
mc.Printf("Hello Word");
}
class MyClass : MyInterface
{
public void Printf(string s)
{
Console.WriteLine(s);
}
}
interface MyInterface
{
void Printf(string s);
}
一个类支持多个接口,多个类也支持相同接口。
继承
任何类都可以从另一个类中继承,这个类拥有它继承类的所有成员。和C++不一样,C#中只能有一个基类。
static void Main(string[] args)
{
MyClassB mc = new MyClassB();
mc.PrintfA();
mc.PrintfB();
}
class MyClassA
{
public void PrintfA()
{
Console.WriteLine("A");
}
}
class MyClassB:MyClassA
{
public void PrintfB()
{
Console.WriteLine("B");
}
}
多态
继承的一个结果是派生于基类的类的方法和属性上有一定的重叠,因此,可以使用相同的语法处理从同一积累实例化的对象。
采用virtual关键字和override关键字
static void Main(string[] args)
{
MyClassB mc = new MyClassB();
mc.PrintfA();
//此时输出了B
}
class MyClassA
{
public virtual void PrintfA()
{
Console.WriteLine("A");
}
}
class MyClassB:MyClassA
{
public override void PrintfA()
{
Console.WriteLine("B");
}
}
值类型和引用类型
- 值类型在内存的同一个地方存储它们自己和它们的内容。
- 引用类型存储指向内存中其他某个位置(称为堆)的引用,实际内容存储在这个位置