CS4L21——特性
CS4L21——特性 本章代码关键字 1234567891011121314Attribute // 特性基类,声明特性类时需要继承此类[特性名()] // 添加特性语法type.IsDefined() // 判断类似是否添加了某个特性type.GetCustomAttribute() // 获取类型添加的特定特性信息type.GetCustomAttributes() // 获取类型添加的所有特性信息memberInfo.GetCustomAttribute() // 获取类型添加的特定特性信息memberInfo.GetCustomAttributes() // 获取类型添加的所有特性信息[AttributeUsage()] // 限制自定义特性的使用范围[Obsolete] ...
CS4L1——ArrayList
CS4L1——ArrayList 本章代码关键字 1234567891011121314System.Collections //各个数据集合类所在的命名空间Arraylist //数组列表类,使用object存储所有值arrayList.Add() //增加arrayList.AddRange() //范围增加arrayList.Insert() //插入arrayList.Remove() //移除某个元素arrayList.RemoveAt() //移除某个位置上的元素arrayList.Clear() //清空列表arrayList[] //列表可以通过索引器去读取元素值修改元素值arrayList.Contains() //检查列表是否存在某个元素arrayList.IndexOf() ...
CS3SL3——面向对象七大原则
CS3SL3——面向对象七大原则 为什么要有七大原则 七大原则总体要实现的目标是:高内聚、低耦合 使程序模块的可重用性、移植性增强 何为高内聚低耦合 从类角度来看:高内聚低耦合要减少类内部,对其他类的调用 从功能块来看:高内聚低耦合要减少模块之间的交互复杂度 面向对象七大原则 注意 初学程序阶段,不要过多的纠结于七大原则, 先用最适合自己的方法把需求实现了,再使用七大原则去优化 不要想着一步到位,要循序渐进,面向对象编程能力提升是需要经验积累的 单一职责原则 即:一个类只处理自己应该处理的内容,不应该什么都写在一起 SRP (Single Responsibility Principle),类被修改的几率很大,因此应该专注于单一的功能。 如果把多个功能放在同一个类中,功能之间就形成了关联,改变其中一个功能,有可能中止另一个功能。 举例:假设程序、策划、美术三个工种是三个类,他们应该各司其职,在程序世界中只应该做自己应该做的事情。 开闭原则 OCP (Open-Closed...
CS3SL2——UML类图
CS3SL2——UML类图 UML UML(Unified Modeling Language,UML),即统一建模语言 是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。 UML...
CS3SL1——多脚本文件
CS3SL1——多脚本文件 了解C#项目脚本格式和路径 打开解决方案所在文件夹,可以看到如下内容 .vs —— 存储当前用户在解决方案中的工作配置 项目文件夹,可有多个项目 .sln 文件 —— Visual Studio 解决方案文件 此文件一般不应该手动编辑,它主要用于将项目、项目项和解决方案项组织到解决方案中。双击该文件会通过 Visual Studio 打开解决方案 打开其中一个工程,它的固定结构如下: bin —— 存放C#工程编译出来的exe和dll文件 obj —— 存放C#项目编译过程中生成的中间临时文件 cs 文件以及自己创建的文件夹(左图除了bin和obj都是自己创建的) cs 文件就是C#源代码文件,而在IDE内部创建的文件夹也会在工程路径下创建 csproj 文件 —— C#项目配置文件,配置编译器版本和引用项目等等 新建脚本文件 在IDE内,可以手动操作创建 cs 文件,一般就是类、接口、结构体,就对应一个脚本 Visual Studio的创建方式就是在要新建脚本的项目内右键 —— 添加...
CS3L27——抽象类和接口的区别
CS3L27——抽象类和接口的区别 抽象类和接口相同点 都可以被继承,都不能直接实例化 都可以包含方法申明,子类必须实现未实现的方法 都遵循里氏替换原则 抽象类和接口的不同点 抽象类中可以有构造函数;接口不能 抽象类只能被单一继承;接口可以继承多个 抽象类可以有成员变量;接口不能 抽象类中可以申明成员方法,虚方法,抽象方法,静态方法;接口只能申明没有实现的抽象方法 抽象类可以使用访问修饰符;接口中建议不写,默认 public 如何选择抽象类和接口 表示对象的用抽象类,表示行为拓展的用接口 不同对象拥有的共同行为,我们往往可以使用接口来实现 例如:动物是一类对象,可以使用抽象类;而飞翔是一个行为,就可以选择接口
CS3L26——结构体和类的区别
CS3L26——结构体和类的区别 结构体和类区别概述 结构体和类最大的区别是在存储空间上,结构体是值类型,类是引用类型 因此他们的存储位置一个在栈上,一个在堆上 值和引用对象在赋值时的就存在区别 结构体和类在使用上很相似,结构体甚至可以用面向对象的思想来形容一类对象 结构体具备着面向对象思想中封装的特性,但是不具备继承和多态的特性,因此大大减少了它的使用频率 由于结构体不具备继承的特性,所以它不能够使用 protected 保护访问修饰符 细节区别 结构体是值类型,类是引用类型 结构体存在栈中,类存在堆中 结构体成员不能用 protected 保护访问修饰符,类可以 结构体成员变量申明不能指定初始值,类可以 结构体不能申明无参的构造函数,而类可以 结构体申明有参构造函数后,无参构造不会被顶掉 结构体不能申明析构函数,类可以 结构体不能被继承,类可以 结构体需要在构造函数中初始化所有成员变量,而类随意 结构体不能被静态 static...
CS3L22——命名空间
CS3L22——命名空间 本章代码关键字 123namespace //命名空间关键字public //公开的类,可以被另外的工程调用internal //内部的类,不能被其他工程调用 命名空间 命名空间是用来组织和重用代码的 作用:就像是一个工具包,类就像是一件一件的工具,都是申明在命名空间中的 命名空间是个工具包 用来管理类,在不同命名空间中允许有同名类 不同命名空间中相互使用,需要引用命名空间或指明出处,命名空间可以可以包裹命名空间 命名空间的声明 命名空间可以分开写,甚至可以分成两个文件写,但是同一命名空间内不可以有同名类(分部类可以分开声明) 基本语法如下: 123456namespace 命名空间名{ class 类1 { ... } class 类2 { ... } // ...} 示例: 1234567891011namespace MyGame{ class GameObject {...
CS3L23——object中的方法
CS3L23——object中的方法 本章代码关键字 12345678910//静态方法Object.Equals() //用来判断两个值是否相等,最终的判断权交给左侧对象的Equals成员方法(注意不是静态方法!)Object.ReferenceEquals() //比较两个对象是否是相同的引用,主要是用来比较引用类型的对象,值类型对象返回值始终是 false//成员方法object.GetType() //在运行时获取对象的类型object.MemberwiseClone() //该方法用于获取对象的浅拷贝对象,它会返回一个新的对象,新旧对象的引用类型成员都指向同一个数据//虚方法object.Equals() //默认实现还是比较两者是否为同一个引用,可以重写该方法,定义自己的比较相等的规则object.GetHashCode() //获取对象哈希码,可以通过重写该函数来自己定义对象的哈希码算法object.ToString() ...
CS3L21——密封方法
CS3L21——密封方法 本章代码关键字 1sealed //让虚方法或者抽象方法之后不能再重写 密封方法 用密封关键字 sealed 修饰的重写函数 作用:让 虚方法 或者 抽象方法 之后不能再重写 特点:和 override 一起出现 实例 1234567891011121314151617181920212223242526272829abstract class Animal{ public string name; public abstract void Eat(); public virtual void Speak() { Console.WriteLine("叫"); }}class Person : Animal{ //密封后,之后的子类无法在重写这个函数 public sealed override void Eat() { } public override void Speak()...