构造函数
构造函数会在类创建对象的时候自动调用自己,我们一般用于初始化对象存储的数据,所以构造函数本质是用于初始化数据的函数
public class Person {
//父类的构造方法
public Person(string name1){
this.name = name1;
num1 = 2;
}
public int num
{
get{
if (num1==5)
{
num1 = 1;
}
return num1;
}
set{
num1 = value*2;
}
}
private int num1;
public string name = "小明";
public void show()
{
Console.WriteLine("我叫{0}", name) ;
}
//实例化父类的构造方法
Person xaioming = new Person("小黑");
xaioming.show();
字段
private int num1;
public string name = "小明";
属性
访问属性和访问字段一样,当取得属性的值的时候,就会调用属性中的get块执行get块中的语句,所以get块需要一个返回值,类型就是属性的类型;当我们去给属性设置值的时候,就会调用属性中的set块,我们可以在set块中通过value访问到我们设置的值
public int num
{
get{
if (num1==5)
{
num1 = 1;
}
return num1;
}
set{
num1 = value*2;
}
}
访问修饰符
public公开的的,访问最高权限; private私有的,只能在类或者结构体内部中使用; protected本类及其子类可使用; internal 只允许在同个项目中被访问
base关键字
当我们使用继承的时候,可能子类中也会有相同的属性和方法,但是有的时候我们就想使用父类中的属性和方法,这时候我们可以使用base关键字,base表示的就是父类,我们可以通过base.父类中的属性名来获取父类中的属性
//父类的构造方法
public Person(string name1){
this.name = name1;
}
//将子类中的传进来的参数传递给父类的构造方法
public Student(string name1,int num1):base(name1)//给父类的构造方法传值
{
num = num1;
}
抽象类
//怪物抽象类
abstract class Monster
{
abstract public void attack1();//抽象方法
}
//重写父类中的方法
class Linpo : Monster
{
public override void attack1()
{
Console.WriteLine("向前冲");
}
}
静态和非静态的区别:
被static修饰的是静态成员,没有被static修饰的是非静态成员(实例成员)。 在静态类中可以有静态成员,也可以有非静态成员,但是静态类中只能有静态成员。 在类中,静态方法要调用的话只能通过类名.方法名,不能通过对象名.方法名调用
//静态类,静态类只允许静态成员和实例成员(非静态成员)
public static class Fruit
{
public static int num;
public static void Show()
{
Console.WriteLine("我是静态方法");
}
}
//创建一个非静态类 非静态类允许静态成员或实例成员
public class Water
{
public Water(int id)
{
this.id = id;//只能在构造方法中赋值
}
public readonly int id;
public static int num;
public int num2;
public void Show()
{
Console.WriteLine("我是非静态方法");
}
public static void drink()//静态方法只能使用静态成员
{
Console.WriteLine(" 我被喝了");
}
}
Fruit.Show();//静态方法直接用类名.方法()名调用
Water.drink();
Water yibao = new Water(12345);
yibao.Show();
Console.WriteLine(yibao.id);//12345