默认是实例类
在类前加上static ,就是静态类
静态类中,所有包含的成员必须是静态成员
实例成员是属于具体某个对象的
Person p1 = new Person();
p1.Age = 20;
p1.Name = “张三”;
class Person
{
public string Name { get; set; }
public int Id { get; set; }
public string FirstName { get; set; }
public int Age { get; set; }
}
静态成员
静态成员是属于类的,实例成员属于对象的
Person p1 = new Person();
p1.Age = 20;
p1.Name = “张三”;
Person.Country = “中国”;
Person p2 = new Person();
p2.Age = 30;
p2.Name = “李四”;
Console.WriteLine(p1.Name);
Console.WriteLine(Person.Country);
static class Myclass
{
// 静态类中,所有包含的成员必须是静态成员
static void M1()
{
}
}
class Person
{
public string Name { get; set; }
public int Id { get; set; }
public string FirstName { get; set; }
public int Age { get; set; }
// 访问静态成员的时候不能通过对象来访问,
// 只能类名访问
public static string Country { get; set; }
}
1,静态成员的数据直到程序退出后才会释放资源 ,而实例对象只要使用完毕就会释放
2,通用,公用方法
3,与具体对象无关
4,工具方法
1, 静态构造函数不能手动来调用,用是在第一次使用静态成员时自动调用
不能为静态构造函数添加访问修饰符,默认为private
2, 静态构造函数不能传参,原因是静态构造函数是系统自动调用的
3, 只执行一次,在第一次使用静态类或静态成员的时候执行
有静态构造函数,实例构造函数时,静态构造函数会先执行
Myclass m1 = new Myclass();
Console.WriteLine(“开始”);
Myclass.n1 = 200;
Console.WriteLine(Myclass.n1);
Console.ReadLine();
public class Myclass
{
public Myclass()
{
Console.WriteLine(“实例”);
}
// 静态类中,所有包含的成员必须是静态成员
static Myclass()
{
Console.WriteLine("静态构造函数");
n1 = 100;
}
public static int n1 ;
static void M1()
{
}
}
把不同的子类对象当作父类来看,可以屏蔽不同子类的差异,
写出通用代码,做出通用编程,以适应需求
使用as 的方式进行类型转换,转换失败也不会报异常,而是返回null
虚方法
抽象类
接口
1,抽象类可以有实例成员,也可以有抽象成员
2, 不能有任何实现
3, 抽象成员必须 包含在抽象类中
4, 抽象类不能用来实例化对象
5, 抽象成员子类继承 以后,必须重写 override,除非子类也是抽象类
学生类和老师类中抽象出父类Person,并让老师和学生都有Say和Standup方法
Person s1 = new Student();
s1.Say();
s1.Standup();
Person s2 = new Teacher();
s2.Say();
s2.Standup();
Console.ReadLine();
Console.ReadKey();
abstract class Person
{
public abstract void Say();
public abstract void Standup();
}
class Student : Person
{
public override void Say()
{
Console.WriteLine(“学生说”);
}
public override void Standup()
{
Console.WriteLine("学生Standup");
}
}
class Teacher : Person
{
public override void Say()
{
Console.WriteLine(“老师说”);
}
public override void Standup()
{
Console.WriteLine("老师Standup");
}
}
int,char,double,float,long,short,byte,bool,enum,struct,decimal
值类型都是派生自ValueType
值类型不能继承 ,只能实现接口
String, 数组,类,接口,委托
int n = 100;
int m = n;
m = m + 1;
Console.WriteLine(n);
Console.WriteLine(m);
Console.ReadKey();
Person p = new Person();
p.Name = “张三”;
Person p1 = p;
p1.Name = “李四”;
Console.WriteLine(p.Name);
Console.ReadKey();
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
1, 值传递—默认传递,栈内容复制一份
2, 引用传递 ref栈地址,传递栈本身的地址 相同于给变量取了个别名
方法重载 overload与方法重写 override 区别:
方法重载 overload 一个类中的几个方法重载,在程序编译的时候就能确定
方法重写 override 父子类中,才会出现重写,只有程序运行时才能确定