类:
1、类规定了能够存储的数据类型,能够执行的方法、能够完成的任务;
2、类定义是一个说明,保存在类文件中;
3、类是引用数据类型。
对象:
1、对象在内存中;
2、对象以类为模板,通过对象使用类中的规定的数据类型、方法;
3、对象属性使用:对象名.属性名(get、set方法);
4、对象方法使用:对象名.方法名;
5、对象通过属性获取对应字段的值或者给字段赋值。(外界可通过属性访问私有字段)
结构体和类的区别:
1,结构是值类型(Value Types),类是引用类型(Reference Types)。
2,结构使用栈存储(Stack Allocation),类使用堆存储(Heap Allocation)。
3,所有结构成员默认Public,类的变量和常量默认Private,不过其他类成员默认都是Public。
4,结构成员不能被声明为Protected,类成员可以。
5,结构变量声明不能指定初始值、使用New关键字对数组进行初始化,类变量声明可以。
6,结构不能声明默认的构造函数,即不拥有参数的非共享构造函数,类可以。
7,二者都可以拥有共享构造函数,结构的共享构造函数不能带有参数,但是类的共享构造函数则可以带或者不带参数。
8,结构不允许声明析构函数(Destructor),类可以。
9,结构的实例(Instance)声明,不允许对包含的变量进行初始化设定,类可以。
10,结构是隐式继承自ValueType类,而且不能继承任何其他类型,类可以继续自ValueType以外的任何类。
11,结构不需要构造函数,类需要构造函数。
结构体:
struct 结构体名{
访问修饰符 类型 变量名;
...
访问修饰符 类型 变量名;
}
using System;
namespace lesson01{
struct Person {
public string name; //public 类型 变量名,在结构体中不可以设置初始值
}
struct Point2 {
public float x;
public float y;
}
class MainClass {
public static void Main ( string[] args ) {
Person p; //使用结构体成员,结构体类型变量.成员名
p.name="苏利文";
Console.WriteLine ( p.name );
Point2 p1;
p1.x = 2.5f;
p1.y = 1.0f;
Console.WriteLine ("P({0}, {1})",p1.x,p1.y);
}
}
}
类:
[访问修饰符] class 类名 {
类的描述信息}
使用new关键字进行初始化
类名 变量名 = new 类名();对象——类实例化的结果
字段(变量)
public 数据类型 字段名;
赋值:对象名.字段名=值;取值:对象名.字段名
using System;
namespace Lesson01 {
public class Person {
//定义一个类
//字段——用于描述类中的特征
//在类中,可以给字段设置初始值
//public string name = “Mike”;
public string name;
}
class MainClass {
public static void Main ( string[] args ) {
//声明一个变量p,p即对象,使用new进行初始化
//实例化——使用类创建出对象的过程
Person p = new Person () ;
//对象.字段名——访问类中的字段;
p.name = "Mike";
}
}
}
①静态类:
1、静态构造方法不能有参数和访问修饰符;
2、静态构造方法可以存在于普通类或静态类中;
3、静态构造会在第一次实例化或调用静态成员时调用。
堆区——程序员手动开辟并管理内存
栈区——系统自动完成内存管理
静态区(全局区)——程序运行过程中,内存中的数据一直存在
常量区——存放常量
代码区——存放程序运行所需要的代码
using System;
namespace Lesson01 {
//静态类中,只能包含静态的成员(字段,属性,方法),常量
public static class A {
//静态字段
public static int i;
//静态构造方法
//静态构造方法不允许添加访问修饰符
//静态构造方法会在首次访问类中的静态成员时调用
static A () {
Console.WriteLine ("A 的静态构造方法");
}
//静态方法
public static void Test () {
Console.WriteLine ("test");
}
}
public class B { //静态方法也可以在普通类中
static B () { //静态构造方法会在创建对象并初始化之前调用
Console.WriteLine ("B 的静态构造方法");
}
}
class MainClass {
public static void Main ( string[] args ) {
// 使用类名调用静态成员,不能通过实例调用
A.i = 10 ;
Console.WriteLine (A.i);
A.Test () ;
B b = new B () ;
}
}
}
②抽象类:
1、抽象类用于描述所有子类的共同特性,仅仅为了表达抽象概念,不与具体事物相联系;
2、抽象类不能被直接实例化;
3、抽象类只声明不实现,但是在子类中必须全部实现;
4、抽象类中可以包含非抽象方法,抽象方法只能写在抽象类中;
5、抽象方法不能使用Private访问权限修饰符。
using System;
namespace Lesson01 {
public abstract class Food { //抽象方法需要添加abstract关键字
public abstract void Eat () ; //父类中定义的抽象方法不能被实现
public void Test () { //抽象类中可包含普通方法
Console.WriteLine ("Test");
}
}
public class Apple : Food {
public override void Eat () { //子类实现父类的抽象方法,需添加override
Console.WriteLine ("HP + 10");
}
}
public class Water : Food {
public override void Eat () {
Console.WriteLine ("MP + 10");
}
}
class MainClass {
public static void Main ( string[] args ) {
Food f1 = new Apple () ;
Food f2 = new Water () ;
//Food f =new Food () ;抽象类不能被直接实例化;
f1.Eat () ;
f2.Eat () ;
f1.Test () ;
}
}
}