深入类的方法
一.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);
}
经验:
一旦程序报错"未将对象引用设置到对象的实例",我们就可以认定某个对象没有实例化。此时可以通过错误代码找到是哪个对象没有实例化,进行相应修改即可
- 结合VBS,实现批处理自动以管理员身份执行
- ASM 翻译系列第三十六弹:ACFS磁盘组的重平衡操作
- Linux基础知识之xargs命令
- HDU-------(2795)Billboard(线段树区间更新)
- ASM 翻译系列第三十七弹:ASM密码文件目录
- 发现插件生成的robots.txt不能被谷歌和360识别
- Github 年度开源报告:TensorFlow 成最受欢迎深度学习项目
- [持续更新]批处理重命名系列案例
- java学习之协调同步的线程
- 如何确保NFS服务安全
- ASM 翻译系列第三十八弹:ASM数据清理
- 借助PageSpeed,为Nginx网站服务器提速
- DX-watermark插件无法预览及上传图片报imagesx()错误的解决办法
- 抓取占用CPU高的JAVA线程,进而找出有问题的WEB页面
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- pytest文档43-元数据使用(pytest-metadata)
- Python | 面试的常客,经典的生产消费者模式
- LeetCode 87,因为题目晦涩而被点了1500+反对的搜索问题
- LeetCode 87,远看是字符串其实是搜索,你能做出来吗?
- Golang中的interface是干嘛的?从面向对象中的多态与接口开始说起……
- pandas | DataFrame基础运算以及空值填充
- C++设计模式笔记(08) - Factory Method工厂方法
- 【Code】GraphSAGE 源码解析
- Kafka常见的导致重复消费原因和解决方案
- 近30个MySQL常用函数,必须推荐!
- 搞定 CompletableFuture,并发异步编程和编写串行程序还有什么区别?你们要的多图长文
- 用注解实现 MyBatis 开发
- MyBatis 实现数据的增删改查
- 0790-5.16.2-NameNode服务的edits不同步异常
- 0789-不停止MySQL服务重做备库的方法