深刻类的秘诀

一.C#最首要字扩展解释:

一.C#首要字扩展解释:

  1. new :

  1. new :

    一)开拓空间

    一)开拓空间

    二)调用构造

    贰)调用构造

    叁)实例化对象

    三)实例化对象

  2. this:

  2. this:

    当前类的实例,用来差距入参和分子变量

    当前类的实例,用来不一致入参和成员变量

  3.  void  

  3.  void  

    void修饰的措施表示回去值类型为空,并不表示未有再次来到值

    void修饰的方法表示回去值类型为空,并不表示未有再次回到值

二.构造方法:

贰.构造方法:

  一.构造函数

  1.构造函数

    特点:

    特点:

      方法名与类名相同

      方法名与类名同样

      未有回来值类型

      未有回到值类型

      首要完毕目的的先导化工作

      重要产生目的的开首化专门的工作

    注:不能够将构造函数定义为void

    注:不可能将构造函数定义为void

      依据周围的阅历,我们在进行开荒时,一般不在构造函数中举行类的伊始化以外的事情,不要品味展现地调用构造函数

      依照广大的阅历,大家在进张开垦时,一般不在构造函数中进行类的开首化以外的事务,不要品味展现地调用构造函数

  二.无参构造

  二.无参构造

    语法:   

    语法:   

访问修饰符 类名()
{
          //方法体          
}        
访问修饰符 类名()
{
          //方法体          
}        

    代码示例:

    代码示例:

  

  

 public Book() { }
 public Book() { }

  三.带参构造函数

  叁.带参构造函数

    语法:

    语法:

    

    

访问修饰符 类名(参数列表)
{
          //方法体          
} 
访问修饰符 类名(参数列表)
{
          //方法体          
} 

      参数列表一般用来给类的习性赋值

      参数列表一般用来给类的属性赋值

    优点:

    优点:

      灵活性越来越好

      灵活性更加好

      通过参数来动态调节对象的风味

      通过参数来动态调控对象的特征

    示例代码:

    示例代码:

public Book(int price, string author, string name)
        {
            //当前类的实例 ,用来 区分入参  和成员变量。
            this.price = price;
            this.author = author;
            this.name = name;

        }
public Book(int price, string author, string name)
        {
            //当前类的实例 ,用来 区分入参  和成员变量。
            this.price = price;
            this.author = author;
            this.name = name;

        }

  四.隐衷构造函数

  四.隐衷构造函数

    在未有手动编写构造时,系统会给我们自动生成二个无参构造

    在平素不手动编写构造时,系统会给大家自动生成叁个无参构造

    为啥系统要自动生成无参构造?

    为啥系统要自动生成无参构造?

            是为着给未来给高端框架,高档框架在底层能够透过无参构造给大家的类创设对象。

            是为了给今后给高档框架,高等框架在尾部能够因而无参构造给我们的类创立对象。

3.措施重载

叁.形式重载

  一.构造函数重载

  一.构造函数重载

  

  

 public class Player
    {
        //构造函数也可以构成重载
        public Player() 
        {

        }

        public Player(int age) 
        {

        }
}
 public class Player
    {
        //构造函数也可以构成重载
        public Player() 
        {

        }

        public Player(int age) 
        {

        }
}

  二.措施重载

  二.格局重载

    特点:

    特点:

      方法名一样

      方法名同样

      方法参数类型分化可能参数个数不一致

      方法参数类型差异可能参数个数分歧

      在同几个类中

      在同三个类中

    供给留意,方法名及参数列表一样的主意,仅是回去值类型分歧,不能称之为方法重载

    要求小心,方法名及参数列表一样的不二法门,仅是回到值类型分裂,不能够称之为方法重载

    

    

 public void Say() { }

        public string Say(int age)
        { 
            return "1"; 
        }






 public void Eat(int age,string name) 
        {

        }

        public void Eat(string name, int age)
        {

        }
 public void Say() { }

        public string Say(int age)
        { 
            return "1"; 
        }






 public void Eat(int age,string name) 
        {

        }

        public void Eat(string name, int age)
        {

        }

  四.模仿Console系统类的WriteLine方法的可变参数数量传入

  四.模仿Console系统类的WriteLine方法的可变参数数量传入

    

    

 public class MagicClass
    {
       //param 参数  params 参数集合   可变参数 
       public void Say(params object[] arg) 
       {

       }
    }
 public class MagicClass
    {
       //param 参数  params 参数集合   可变参数 
       public void Say(params object[] arg) 
       {

       }
    }

    :方法重载不仅能防止命名的麻烦,还能够使调用者不必推断情势名就可一向调用

    :方法重载不仅能幸免命名的劳动,仍是能够使调用者不必判定方法名就可径直调用

四.目标间的互相

四.对象间的交互

  1.概述:

  1.概述:

    在面向对象的社会风气里,一切皆为目的

    在面向对象的世界里,壹切皆为对象

    对象与目的相互独立,互不干涉,但在确定的外力的效劳下,对象初始联合职业

    对象与对象相互独立,互不干涉,但在必然的外力的意义下,对象初步共同工作

  

  

    种种类都有温馨的性状和机能,大家把它们封装为属性和方法

    每种类都有投机的特色和职能,我们把它们封装为属性和艺术

    对象时期通过品质和方法实行交互

    对象之间通过质量和措施开始展览相互

    能够以为方法的参数及措施的重回值都是目标相互传送的音信

    能够以为方法的参数及办法的重返值都以目的相互传送的音讯

  2.实例

  2.实例

    

    

    //遥控器
    public class Contol
    {

        public void Open(Tv tv)
        {
            tv.Open();
        }
        public void Close(Tv tv) 
        {
            tv.Close();
        }
        public void ChangeChannel(Tv tv,string channelName)
        {
            tv.ChangeChannel(channelName);
        }
    }




    /// <summary>
    /// 电视机
    /// </summary>
    public class Tv
    {
        //维护一个状态
        bool state = false;//关闭
        public void Open() 
        {
            if (state==false)//关闭的
            {
                state = true;//状态切换到开 机状态
                Console.WriteLine("电视机打开啦!!!!!~~~~~");
            }   
        }
        public void Close()
        {
            if (state == true)//开着的
            {
                state = false;//状态切换到关 机状态
                Console.WriteLine("电视机关闭啦!!!!!~~~~~");
            }
        }

        public void ChangeChannel(string channelName)
        {
            if (state==true)
            {
                Console.WriteLine("您已经成功切换到"+channelName);
            }
        }

    }




        static void Main(string[] args)
        {
            //01.买一个电视机
            Tv tv = new Tv();


            //02.买一个遥控器
            Contol control = new Contol();

            //03.进行操作
            control.Open(tv);
            control.ChangeChannel(tv, "凤凰卫视");
            control.Close(tv);


        }
    //遥控器
    public class Contol
    {

        public void Open(Tv tv)
        {
            tv.Open();
        }
        public void Close(Tv tv) 
        {
            tv.Close();
        }
        public void ChangeChannel(Tv tv,string channelName)
        {
            tv.ChangeChannel(channelName);
        }
    }




    /// <summary>
    /// 电视机
    /// </summary>
    public class Tv
    {
        //维护一个状态
        bool state = false;//关闭
        public void Open() 
        {
            if (state==false)//关闭的
            {
                state = true;//状态切换到开 机状态
                Console.WriteLine("电视机打开啦!!!!!~~~~~");
            }   
        }
        public void Close()
        {
            if (state == true)//开着的
            {
                state = false;//状态切换到关 机状态
                Console.WriteLine("电视机关闭啦!!!!!~~~~~");
            }
        }

        public void ChangeChannel(string channelName)
        {
            if (state==true)
            {
                Console.WriteLine("您已经成功切换到"+channelName);
            }
        }

    }




        static void Main(string[] args)
        {
            //01.买一个电视机
            Tv tv = new Tv();


            //02.买一个遥控器
            Contol control = new Contol();

            //03.进行操作
            control.Open(tv);
            control.ChangeChannel(tv, "凤凰卫视");
            control.Close(tv);


        }

   经验:

   经验:

     壹旦程序报错”未将目的引用设置到目标的实例”,大家就能够确认有个别对象没有实例化。此时得以经过错误代码找到是哪些目标未有实例化,进行相应修改就能够

     一旦程序报错”未将对象引用设置到目的的实例”,大家就足以肯定有些对象未有实例化。此时能够经过错误代码找到是哪位目的未有实例化,举行对应修改就能够

 

 

    

    

相关文章