文章目录

  • 结构体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注释相关推荐

  1. 《Fluent Python》学习笔记:第 8 章 对象引用、可变性和垃圾回收

    本文主要是 Fluent Python 第 8 章的学习笔记.这部分主要是介绍了变量.引用.对象.深拷贝.浅拷贝.垃圾回收等.本章虽然枯燥,但是非常有用. <Fluent Python>学 ...

  2. java学习笔记(十一)常用类、反射、垃圾回收

    常用类: System类代表当前java程序的运行平台,Runtime类代表当前java程序的运行时环境. String代表一个不可变的字符串,StringBuffer和Stringbulider代表 ...

  3. 【EF学习笔记09】----------使用 EntityState 枚举标记实体状态,实现增删改查

    [EF学习笔记09]----------使用 EntityState 枚举标记实体状态,实现增删改查 讲解之前,先来看一下我们的数据库结构:班级表 学生表 如上图,实体状态由EntityState枚举 ...

  4. Think in Java第四版 读书笔记9第15章 泛型

    Think in Java第四版 读书笔记9第15章 泛型 泛型:适用于很多很多的类型 与其他语言相比 Java的泛型可能有许多局限 但是它还是有很多优点的. 本章介绍java泛型的局限和优势以及ja ...

  5. 【Rust 笔记】09-特型与泛型

    09 - 特型与泛型 Rust 的多态性: 特型(trait) 泛型(generic) 特型:Rust 对接口或抽象基类的实现. 如下写字节的特型 std::io::Write: trait Writ ...

  6. 操作符重载——C/C++学习笔记

    此篇文章来自于网上,作为自己学习中的笔记,若有侵权行为,请告之,24小时之内必删除!下面就转入正题吧! 一.什么是操作符重载? 一看到重载,很容易就让人联想到成员函数重载,函数重载可以使名称相同的函数 ...

  7. 学习笔记:Java虚拟机——JVM内存结构、垃圾回收、类加载与字节码技术

    学习视频来源:https://www.bilibili.com/video/BV1yE411Z7AP Java类加载机制与ClassLoader详解推荐文章:https://yichun.blog.c ...

  8. 大数据之路读书笔记-09阿里巴巴数据整合及管理体系

    大数据之路读书笔记-09阿里巴巴数据整合及管理体系 面对爆炸式增长的数据,如何建设高效的数据模型和体系,对这些数据进行有序和有结构地分类组织和存储,避免重复建设和数据不一致性,保证数据的规范性, 直是 ...

  9. 尚硅谷大数据技术Spark教程-笔记09【SparkStreaming(概念、入门、DStream入门、案例实操、总结)】

    尚硅谷大数据技术-教程-学习路线-笔记汇总表[课程资料下载] 视频地址:尚硅谷大数据Spark教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据技术Spark教程-笔记01[SparkCore ...

最新文章

  1. 利用owc生成excel并且显示在页面
  2. 计算机应用教程 中级 平装,计算机应用中级教程
  3. libopencv_core.so: file not recognized: File format not recognized
  4. Python的迭代器和生成器
  5. 谈谈JavaScript的ECMA5中forEach
  6. D37 682. Baseball Game
  7. BurpSuite之HTTP brute暴力破解
  8. MDI格式文件的打开与转换(pdf)
  9. 三星+android+u盘模式,三星安卓机,如何开启开发者模式,进行USB调试?
  10. OA系统行业解析:中小型企业OA选型常见问题
  11. A Linux Kernel Miracle Tour - 启程
  12. java 多文件zip压缩包下载导出
  13. 数据库中update怎么用事例_Oracle的update语句set里使用子查询的例子解释
  14. 前后端传图片用base64好吗_Base64是什么?前端用Base64加载图片到底好不好?
  15. 力扣-患某种疾病的患者
  16. 服务器网络监控系统方案
  17. ps aux 中的 VSZ 代表什么意思,RSS 代表什么意思
  18. 正则校验字符串中汉字数量及总数量
  19. pyshark.tshark.tshark.TSharkNotFoundException: TShark not found.
  20. 电脑直连开发板 (备忘)

热门文章

  1. IOS 正则表达式匹配文本中URL位置并获取URL所在位置(解决连接中文问题)
  2. 处理quartz 异常 Couldn‘t retrieve trigger: No record found for selection of Trigger with key:
  3. zookeeper 异常 :stat is not executed because it is not in the whitelist. Connection closed b
  4. zabbix报错cannot set resource limit: [13] Permission denied解决方法
  5. CondaHTTPError问题的解决
  6. C++之异常捕获和处理
  7. 如何删除添加了.css()函数的样式?
  8. LINQ聚合算法解释
  9. 什么是mixin,为什么它们有用?
  10. win10英文系统一键装机教程