C#笔记09 结构、枚举、异常、泛型、操作符重载、dll、垃圾回收与资源清理、XML注释
文章目录
- 结构体struct
- 枚举enum
- 异常Exception
- 执行try最近的最贴切的catch
- 继承Exception以定义异常
- 泛型
- 泛型的约束where
- 操作符重载
- 类型转换操作符重载
- dll
- VS程序结构
- 为什么需要dll
- 如何引用dll
- 垃圾回收
- 资源清理
结构体struct
struct是值的类型,一个数据块。
struct Location{public int X;public int Y;public Location(int x, int y){this.X = x;this.Y = y;}
}
枚举enum
枚举是值的类型,把已知的一些常量列出来。
enum ConnectionState{Connecting,Connected,Disconnecting,Disconnected
}
static void Test(ConnectionState state){switch (state) //可读性{case ConnectionState.Connecting:.. break;...}
}
异常Exception
执行try最近的最贴切的catch
try{}catch(ArgumentNullException ex){}catch(NullReferenceException ex){}finally{}
继承Exception以定义异常
class MyException: System.Exception{}
泛型
- 泛型就是模板;
- 代码在类型上消除重复;
- 注意使用default();
- C#的泛型不如C++强大。
static T Sum<T>(List<T> nums)where T:struct //约束,T为值类型
{T sum = default(T); //T类型的默认值foreach(var num in nums){sum = sum + num;}
}
泛型的约束where
约束 | 说明 |
---|---|
T:struct | 必须是值类型 |
T:class | 引用类型 |
T:new() | 无参数的公共构造函数 |
T:<基类名> | … |
T:<接口名> | 可以指定多个接口约束 |
T:U | U为裸类型 |
操作符重载
class Location{public int X { get; set; }public int Y { get; set; }public static bool operator==(Location lhs, Location rhs){return lhs.X == rhs.X && lhs.Y == rhs.Y;}public static bool operator!=(Location lhs, Location rhs){return !(lhs == rhs);}
}
...Main(...){Location loc1 = new Location(){X=1, Y=1};Location loc2 = new Location(){X=1, Y=1};// loc1 == loc2; True
}
类型转换操作符重载
class Loaction{...public static implicit/explicit operator double(Location loc){}
}
...Main(){(double)loc2;
}
dll
VS程序结构
- 解决方案 .sln
- 项目(程序集[Assembly]包 模块)dll/exe
- 命名空间(避免一个项目中 重命名)
在项目中添加类库(dll)。
为什么需要dll
- dll动态链接库,可以简单理解为一堆函数;
- 包的划分好,把dll划分出。
如何引用dll
其实System也是引用的dll。(前文using的)
- 手动引入dll
- [DLLImport(…)],仅用于方法
class Program{[DLLImport("kernel.dll")] //引入windows一些底层函数// []成为特性attribute
}
垃圾回收
- 内存管理的一种方式;
- 栈、堆(new 托管堆)
C++用new和delete管理内存,即手工管理内存
一篇微软杂志文章描写了内存管理机制:Garbage Collection:Automatic Memory Management in the Microsoft .NET Framework
- 清理那些“不可到达的”对象。
~Test(){} 终结器
资源清理
资源清理也叫确定性终结。
using与IDisposable结合使用。
class Test : IDisposable{public void Dispose(){// 在using末执行}
}
..Main(..){using (var test = new Test()){// 代码,执行结束执行Dispose}
}
IO、网络、数据库时有用。
using三种用法:调用、资源清理、别名。
C#笔记09 结构、枚举、异常、泛型、操作符重载、dll、垃圾回收与资源清理、XML注释相关推荐
- 《Fluent Python》学习笔记:第 8 章 对象引用、可变性和垃圾回收
本文主要是 Fluent Python 第 8 章的学习笔记.这部分主要是介绍了变量.引用.对象.深拷贝.浅拷贝.垃圾回收等.本章虽然枯燥,但是非常有用. <Fluent Python>学 ...
- java学习笔记(十一)常用类、反射、垃圾回收
常用类: System类代表当前java程序的运行平台,Runtime类代表当前java程序的运行时环境. String代表一个不可变的字符串,StringBuffer和Stringbulider代表 ...
- 【EF学习笔记09】----------使用 EntityState 枚举标记实体状态,实现增删改查
[EF学习笔记09]----------使用 EntityState 枚举标记实体状态,实现增删改查 讲解之前,先来看一下我们的数据库结构:班级表 学生表 如上图,实体状态由EntityState枚举 ...
- Think in Java第四版 读书笔记9第15章 泛型
Think in Java第四版 读书笔记9第15章 泛型 泛型:适用于很多很多的类型 与其他语言相比 Java的泛型可能有许多局限 但是它还是有很多优点的. 本章介绍java泛型的局限和优势以及ja ...
- 【Rust 笔记】09-特型与泛型
09 - 特型与泛型 Rust 的多态性: 特型(trait) 泛型(generic) 特型:Rust 对接口或抽象基类的实现. 如下写字节的特型 std::io::Write: trait Writ ...
- 操作符重载——C/C++学习笔记
此篇文章来自于网上,作为自己学习中的笔记,若有侵权行为,请告之,24小时之内必删除!下面就转入正题吧! 一.什么是操作符重载? 一看到重载,很容易就让人联想到成员函数重载,函数重载可以使名称相同的函数 ...
- 学习笔记:Java虚拟机——JVM内存结构、垃圾回收、类加载与字节码技术
学习视频来源:https://www.bilibili.com/video/BV1yE411Z7AP Java类加载机制与ClassLoader详解推荐文章:https://yichun.blog.c ...
- 大数据之路读书笔记-09阿里巴巴数据整合及管理体系
大数据之路读书笔记-09阿里巴巴数据整合及管理体系 面对爆炸式增长的数据,如何建设高效的数据模型和体系,对这些数据进行有序和有结构地分类组织和存储,避免重复建设和数据不一致性,保证数据的规范性, 直是 ...
- 尚硅谷大数据技术Spark教程-笔记09【SparkStreaming(概念、入门、DStream入门、案例实操、总结)】
尚硅谷大数据技术-教程-学习路线-笔记汇总表[课程资料下载] 视频地址:尚硅谷大数据Spark教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据技术Spark教程-笔记01[SparkCore ...
最新文章
- 利用owc生成excel并且显示在页面
- 计算机应用教程 中级 平装,计算机应用中级教程
- libopencv_core.so: file not recognized: File format not recognized
- Python的迭代器和生成器
- 谈谈JavaScript的ECMA5中forEach
- D37 682. Baseball Game
- BurpSuite之HTTP brute暴力破解
- MDI格式文件的打开与转换(pdf)
- 三星+android+u盘模式,三星安卓机,如何开启开发者模式,进行USB调试?
- OA系统行业解析:中小型企业OA选型常见问题
- A Linux Kernel Miracle Tour - 启程
- java 多文件zip压缩包下载导出
- 数据库中update怎么用事例_Oracle的update语句set里使用子查询的例子解释
- 前后端传图片用base64好吗_Base64是什么?前端用Base64加载图片到底好不好?
- 力扣-患某种疾病的患者
- 服务器网络监控系统方案
- ps aux 中的 VSZ 代表什么意思,RSS 代表什么意思
- 正则校验字符串中汉字数量及总数量
- pyshark.tshark.tshark.TSharkNotFoundException: TShark not found.
- 电脑直连开发板 (备忘)
热门文章
- IOS 正则表达式匹配文本中URL位置并获取URL所在位置(解决连接中文问题)
- 处理quartz 异常 Couldn‘t retrieve trigger: No record found for selection of Trigger with key:
- zookeeper 异常 :stat is not executed because it is not in the whitelist. Connection closed b
- zabbix报错cannot set resource limit: [13] Permission denied解决方法
- CondaHTTPError问题的解决
- C++之异常捕获和处理
- 如何删除添加了.css()函数的样式?
- LINQ聚合算法解释
- 什么是mixin,为什么它们有用?
- win10英文系统一键装机教程