c#第十一课

163 阅读2分钟

构造函数

构造函数会在类创建对象的时候自动调用自己,我们一般用于初始化对象存储的数据,所以构造函数本质是用于初始化数据的函数

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