深入类的方法

一.C#关键字扩充解释:

  1. new :

    1)开辟空间

    2)调用构造

    3)实例化对象

  2. this:

    当前类的实例,用来区分入参和成员变量

  3.  void  

    void修饰的方法表示返回值类型为空,并不代表没有返回值

二.构造方法:

  1.构造函数

    特点:

      方法名与类名相同

      没有返回值类型

      主要完成对象的初始化工作

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

      根据普遍的经验,我们在进行开发时,一般不在构造函数中进行类的初始化以外的事情,不要尝试显示地调用构造函数

  2.无参构造

    语法:   

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

    代码示例:

 public Book() { }

  3.带参构造函数

    语法:

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

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

    优点:

      灵活性更好

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

    示例代码:

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

  4.隐私构造函数

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

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

            是为了给将来给高级框架,高级框架在底层可以通过无参构造给我们的类创建对象。

三.方法重载

  1.构造函数重载

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

        }

        public Player(int age) 
        {

        }
}

  2.方法重载

    特点:

      方法名相同

      方法参数类型不同或者参数个数不同

      在同一个类中

    需要注意,方法名及参数列表相同的方法,仅是返回值类型不同,不能称为方法重载

 public void Say() { }

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






 public void Eat(int age,string name) 
        {

        }

        public void Eat(string name, int age)
        {

        }

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

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

       }
    }

    :方法重载不仅能避免命名的麻烦,还能使调用者不必判断方法名就可直接调用

四.对象间的交互

  1.概述:

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

    对象与对象相互独立,互不干涉,但在一定的外力的作用下,对象开始共同工作

    每个类都有自己的特性和功能,我们把它们封装为属性和方法

    对象之间通过属性和方法进行交互

    可以认为方法的参数及方法的返回值都是对象相互传递的消息

  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);


        }

   经验:

     一旦程序报错"未将对象引用设置到对象的实例",我们就可以认定某个对象没有实例化。此时可以通过错误代码找到是哪个对象没有实例化,进行相应修改即可

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏LanceToBigData

OOAD-设计模式(四)结构型模式之适配器、装饰器、代理模式

前言   前面我们学习了创建型设计模式,其中有5中,个人感觉比较重要的是工厂方法模式、单例模式、原型模式。接下来我将分享的是结构型模式! 一、适配器模式 1.1...

1799
来自专栏java一日一条

Java 反射机制应用实践

Java反射机制是一个非常强大的功能,在很多大型项目比如Spring, Mybatis都可以看见反射的身影。通过反射机制我们可以在运行期间获取对象的类型信息,利...

612
来自专栏面朝大海春暖花开

java泛型理解。代码更明了。

在工作中,相对于现有的项目源码的数据库操作层,无论是mybatis,hibernate或者是自己封装的baseModel层,都会使用到泛型。

462
来自专栏java达人

List的四张面孔(泛型)

编程的时候,能在编译时发现并修改错误最好,等上线运行时报错才解决,则属于生产事故,且找到bug的位置需要花费更多的时间和精力。泛型是java1.5以后出的内容,...

1915
来自专栏算法channel

设计模式|结构图汇总

1 创建型模式 1 工厂方法模式 ? 2 抽象工厂模式 ? 3 单例模式 ? 4 建造者模式 ? 5 原型模式 ? 2 结构型模式 1 适配器模式 ? 2 装饰...

3164
来自专栏闻道于事

list.add(),向List集合插入对象报空指针异常

开始的时候我没有判断添加的随想是否为空,直接add;后来加了一个判断,判断了对象不等于空, 但是运行程序还是报空指针,这时我发现应该是List出问题了: 查了下...

3007
来自专栏MyBlog

Effective.Java 读书笔记(4)非实例化

有时你想要编写一个类,这个类只是静态方法和静态域的组成,这样的一个类获得一个糟糕的名声因为一些人滥用他们为了避免对对象的术语进行思考,但是他们的确是有用的

582
来自专栏牛肉圆粉不加葱

(2) - apply, update 语法糖

语法糖,又称为糖衣语法,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说可以增加程序的可读性,从而减少程度代码出错的...

662
来自专栏java进阶架构师

手把手带你实现JDK动态代理

业务接口Interface、业务实现类target、业务处理类Handler、JVM在内存中生成的动态代理类$Proxy0

641
来自专栏菜鸟致敬

一分钟带你读懂Python中的三类特殊方法

在Python中有着三类特殊方法:静态方法、类方法以及抽象方法。今天我们来谈谈其中的这三类特殊方法。

422

扫描关注云+社区