面向对象概念
- object 就是对某种事物的抽象
- 抽象原则包括数据抽象和过程抽象两个方面:数据抽象就是对定义对象的属性 过程抽象就是定义对象的操作
- 对象分装了数据和代码
- 封装就是将数据成员属性方法和事件等集合在一个整体。也可以对于访问进行设置
- 继承是可以避免代码的复制和相关代码的维护
- 被继承的类称为“基类 (base class)”“父类”“超类”
- c#一个子类只能由一个基类(单一继承),但允许有多个接口
多态性
类的声明
[特性]
[类修饰符][partial]class 类名[类型形参][:基类或接口[类型形参约束]]
{
类体
}[;]
System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
class MyHelloWorld
{
public void SayHello()
{
Console.WriteLine("Hello World!");
}
}
class Person
{
public string name;
protected int age;
public Person()
{
this.name = "未知";
this.age = 0;
}
public Person(string name,int age)
{
this.name = name;
this.age = age;
}
public void Print()
{
Console.WriteLine("name={0},age={1}", this.name, this.age);
}
}
}
类的访问修饰符
- public(公共) 访问不受限制
- protected(受保护) 访问仅限此类或此类派生
- internal(内部)仅限此程序
- protected internal 兼备2和3
- private(私有)仅限此类
创建和使用对象
- 类名 对象 = new (生成一个实例)
类
- 类的主要成员包括,描述状态的数据成员 和 描述操作的 函数成员
- 类的成员或者静态成员 (static member ) 或者是实例成员 (instance member)
函数成员
用于提供操作类中的数据的某些功能,包括 方法 属性 构造函数 析构函数 运算符 索引器
属性
是字段的自然扩展
构造函数
是名称与类名相同的特殊方法,当类被实例化后,首先会执行构造函数
析构函数
在类名前加上 ~ 当类实力化无效时会被执行
索引器
目的是使类的实例可以按与数组相同的方式进行索引
运算符
用于定义类的实例运算操作,也可以对预定义的运算符进行重载(重新定义运算规则)
静态成员和实例成员
-
静态成员属于类,实例成员属于对象
- 静态成员必须通过类名来引用。
一个静态字段共享同一个存储位置
this关键字
this关键字引用类的当前实例
静态成员方法中不能使用this关键字。
默认访问修饰符
类或结构的默认访问类型是internal
类中所有的成员默认为private
接口默认访问符是internal
接口的成员默认(只能)访问修饰符是public
枚举类型成员默认是public
委托 默认internal
名称空间默认为internal
只读字段
readonly
只能在声明字段时赋值或在构造时赋值
只读变量可以是任意类型