Effective C# 摘录(5) - 使用框架

2023-10-27


35.重写函数优于事件处理器。

   Prefer Overrides to Event Handlers。
   e.g.:实现Form实例时,选择重写OnMouseDown()方法而不是添加事件句柄OnMouseDown()。使用事件有更大的伸缩性,可以在一个事件上添加多个句柄;当有一个派生类中只有一个函数来处理一个事件时,最好用重载太提高可维护性。


36.合理使用.NET运行时诊断。
   Leverage .NET Runtime Diagnostics。
   System.Diagnostics.Debug, System.Diagnostics.Trace和System.Diagnostics.EventLog类可以在程序运行时创建诊断信息。Trace类是由预处理符TRACE进行控制;Debug类是由DEBUG预处理符进行控制;EventLog类可以写一些系统日志,EventLog类不支持运行时配置,但可以把它封装到一个统一的简单接口中。

37.使用标准配置机制。
   Use the Standard Configuration Mechanism。
   在WinForm应用程序中,每个应用程序域最多只有一个应用程序程序配置文件,默认的配置文件应该与应用程序位于同一个目录中,而且以<应用程序名>.<扩展名>.config来命名。Web应用程序相对而言就比较灵活,每个目录都可以有一个自己的配置文件,以web.config来命名。

38.定制和支持数据绑定。
   Utilize and Support Data Binding。
   使用数据绑定比自己写代码要简单得多;在对文字元素通过属性来显示时,尽可能的使用数据绑定而不是显式赋值;在WinForm中,可以对同步的对绑定在多控件上的数据进行相关数据源的检测。.Net框架支持把一个对象的属性映射到控件的属性上(e.g:textBoxName.DataBindings.Add("Text",myDataValue, "Name");可以把textBoxName控件的“Text”属性上绑定了MyDataValue对象的"Name"属性。)。

39.使用.NET验证。
   Use .NET Validation。
   Web应用程序应该在浏览器上进行数据验证,一般是使用JavaScript,一些Web验证控件在生成HTML页面中生成一些JS代码,当每一项输入时,不用每次返回数据到服务器上。但这还不够,我们还是要在服务器端做一些额外的验证,以免受到程序式的攻击。WinForm中用户的输入可以直接用C#代码来验证,所有的Windows控件都是可验证的,一般使用属性访问时的异常来指示非法的输入。

40.根据需要选用恰当的集合。
   Match Your Collection to Your Needs。
   访问多维数组比访问锯齿数组的效率高,访问多维数组时编译器在数组的每个维上是使用的是指针算法,而锯齿数组则要为每个一维数组查找正确的(指针引用)值。
   ArrayList的效率和数组差不多,其优点是可以在运行时动态调整容量大小;队列(Queue)和栈(Stack)是在System.Array类上提供了特殊的接口,它们的内部存储都是基于数组的,修改容量大小时同样会带来性能损失;队列的默认大小是32(0x20,乘2增长),而栈的默认大小是10(乘2增长),ArrayList默认是0(0-4-8-16……乘2增长);
   ListDictionary类用键/值对方式实现了单向链表;
   SortedList 和Hashtable都包含键/值对,SortedList以键进行排序,提供了基于键的有序迭代;而Hashtable在给定的键上进行查找时更快,可以通过键的散列值进行查找(O(1)算法);HashTable的默认大小为11,SortedList的默认大小为0(0-16-32……乘2增长);
   BitArray存储位数组,它是以整数的数组来存储数据的;不要用它来替换一般的图和Boolean数组;
   CollectionBase和ReadOnlyCollectionBase提供了列表和向量结构的基类,DictionaryBase提供了键/值对应的基类,DictionaryBase类是建立在Hashtable上的,它的性能与Hashtable是一致的;
   定长buffer使得我们可以在unsafe结构里声明C风格的数组(e.g:unsafe struct MyClass{public fixed int x[5];}),其主要应用在托管代码和非托管代码互操作的情况,除此之外,我们一般使用托管数组。


41.优先选择DataSet,而不是使用自定义结构。
   Prefer DataSets to Custom Structures。
   如果我们要创建的集合是一个基于某些算法的、对性能要求严格的集合,或者必须有轻便的格式,则我们就要使用自定义结构,否则最好使用DataSet,尤其是类型化的DataSet。


42.利用特性简化反射。
   Utilize Attributes to Simplify Reflection.
   特性可以申明运行的意图,通过使用特性来标记一个元素,可以在运行时指示它的用处以及简化查找这个元素的工作(通过反射来判断类或成员上是否应有了某些特性,进而在实际运行中进行配置);通过使用特性来标记意图,就把大量的责任从开发者身上移到了编译器身上。

43.避免过度使用反射。
   Don't Overuse Reflection.
   使用反射,一个应用程序可以通过添加新的组件来更新功能,实现可动态配置的软件;但同时也带来安全性的问题(成员调用的参数和返回值是以System.Object类型存在的,我们必须在运行时确保这些类型是正确的)。反射应该只在某些调用目标不能清楚的用接口表示时才使用(e.g:.Net的数据绑定)。很多常规情况下很少用反射,而是使用类厂、委托以及接口来创建代码,这可以产生出更容易维护的系统。


44.为应用程序创建特定的异常类。
   Create Complete Application-Specific Exception Classes.
   让你的用户在写catch语句来处理错误时更简单,我们通常要自己创建不同的异常类。当且仅当对于错误有不同的行为要处理时,我们才应该创建不同的异常类(从ApplicationException继承而不是从Exception继承);可以通过提供所有基类支持的构造函数,来创建全功能的异常类;还可以使用InnerException属性来承载底层错误条件的所有错误信息。

 
文章来源:http://blog.csdn.net/happyhippy/archive/2007/04/09/1557696.aspx

转载于:https://www.cnblogs.com/happyhippy/archive/2007/04/09/710932.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Effective C# 摘录(5) - 使用框架 的相关文章

  • javaweb:监听域对象创建和销毁的Listener

    1 什么是Servlet监听器 先来看看什么是监听器 监听器是专门用于对其它对象身上发生的事件或状态改变进行监听和相应处理的对象 当被监视的对象发生情况时立即采取相应的行动 Servlet监听器是Servlet规范中定义的一种特殊类 它用于
  • ubuntu安装code

    进入链接 http code visualstudio com下载 deb 在下载好的文件处终端输入sudo dpkg i code xxx
  • sklearn 数据处理与特征工程

    1 数据处理的流程 2 数据预处理 Preprocessing Impute 2 1 数据无量纲化 在机器学习算法实践中 我们往往有着将不同规格的数据转换到同一规格 或不同分布的数据转换到某个特定分布的需求 这种需求统称为将数据 无量纲化
  • java对list分组_Java List排序,分组等操作

    假定有一列实体类对像 List list UserServer getList 去重 去除重复对象 每个属性的值都一样的 需要注意的是要先重写对象User的equals和hashCode方法 List distinctList list s
  • 冒泡排序,快速排序,选择排序详细过程

    一 冒泡排序 1基本思想 相邻的两个数之间进行比较 按照规则进行交换 2 实现思路 以升序排列为例 第一趟比较 先用第一个和第二个元素进行比较 将较大的交换到第二个位置上 然后第二个和第三个进行比较 将较大的放在第三个位置上 依次类推 第一
  • 宝藏软件Obsidian知识体系搭建,免费的多端云同步

    宝藏软件Obsidian知识体系搭建 免费的多端云同步 为什么推荐Obsidian 人很奇怪 在关注短期目标的时候 会有成功失败之说 但是如果关注体系呢 就不那么会在乎短期收益了 为什么呢 因为体系可能会创造强大的滚雪球效应 使用笔记软件颇
  • Blender设置相机围绕物体旋转

    以下内容参考视频 https www bilibili com video BV1X7411g75c 1 首先随便添加一个物体 选中摄像机 位置 旋转归零 缩放归一 这一步不能少 快捷键 位置归零 Alt G 旋转归零 Alt R 缩放归一
  • C语言创建多线程

    线程是计算机中独立运行的最小单位 每个线程占用的CPU时间是由系统分配的 因此可以把线程看成操作系统分配CPU时间的基本单位 每个线程只有在系统分配给它的时间片内才能取得CPU控制权 执行线程中的代码 Linux操作系统在一个进程内生成多个
  • multipart/form-data (一种POST 数据提交的方式)

    一 初识multipart form data enctype属性 enctype 规定了form表单在发送到服务器时候编码方式 它有如下的三个值 application x www form urlencoded 默认的编码方式 但是在用
  • 解决数字字母不换行的问题

    当在标签中输入的是字母和数字的时候 会出现不换行的情况 导致内容不能显示完整 给p标签或者父标签div增加一下属性 text word break break all container word break break all 实现数字和
  • 博客摘录「 mysql char,mysql to_char」2023年6月12日

    场景 mysql 相仿to char to date 函数mysql 类似to char to date 函数mysql日期和字符相互转换方法date format date Y m d gt oracle中的to char str to
  • 文件没保存怎么恢复?3种方法恢复未保存office文档

    是否遇到过Excel Word或者PPT程序由于电脑断电 崩溃导致没有及时保存文档 如何恢复未保存的office文档文件 本文中提供了3种方法 用以帮助用户了解如何恢复未保存的office文档 以Word为例 数据蛙为大家图文介绍每种办法的
  • spring提前加载,懒加载,bean的作用域和注入注解讲解

    前言 sping知识随笔笔记 spring提前加载 懒加载 bean的作用域和注入注解讲解 spring提前加载 懒加载 bean的作用域和注入注解讲解 前言 1 depends on 2 bean的作用域 3 lazy init 懒加载
  • Spring Boot事务配置管理

    Spring Boot事务配置管理 场景 我们在开发企业应用时 由于数据操作在顺序执行的过程中 线上可能有各种无法预知的问题 任何一步操作都有可能发生异常 异常则会导致后续的操作无法完成 此时由于业务逻辑并未正确的完 成 所以在之前操作过数
  • HJ32 密码截取

    题目 HJ32 密码截取 题解 暴力截取所有子串 利用双指针判断子串是否为回文串 获取最大长度回文串 public int interceptPassword String password int maxLength 100 for in
  • vue 单页面(SPA) ,IOS端页面跳转后调用微信jssdk 时报错: "invalid signature"的解决方案

    背景 1 JS接口安全域名 OK 2 Android手机 微信开发者工具 测试分享都没问题 问题 在IOS手机微信端 从A页面 http a com A 跳转到B页面 http a com B 后 B页面进行分享时就会报签名 invalid
  • div让两个按钮并排显示在一行中

    做微信小程序 查了一些方法 对于我来说都不适用 有各种各样的问题 下面的这个试了 可以 wxml语法
  • java android小程序_java和android一些小程序

    Java 和 android 的一些小程序 1 给定字符串 String str a b c g b h l b h r v 剔除重 复的 并统计出之后其个数 public class zhaoshu1 构造遍历字符串及将重复出现的字符置空
  • 基于YOLOv5&opencv的交通道路三角锥检测系统(部署教程&源码)

    1 研究背景与意义 随着城市化进程的加快和交通流量的不断增加 交通安全问题成为了一个日益突出的社会问题 其中 交通道路上的三角锥是一种常见的交通安全设施 用于标记道路施工 交通事故现场 道路封闭等情况 然而 由于道路规模庞大 人力资源有限
  • GCN初步尝试

    任务如下 读取cora数据集 有2708个节点 每个节点有1433个特征 每个节点属于7类中的一类 节点之间存在边 注 cora的节点标号不是从0开始计数 故需要进行处理 附上一份简约代码 建立一个两层的GCN 这里的edges是经过节点重

随机推荐

  • GitBucket 搭建属于自己的GitHub。

    GitBucket是一个开源的代码管理仓库 就像GitHub一样 什么意思了 说白了我们可以下载GitBucket 然后放到自己服务器的Tomca容器上 就可以把代码往上面提交 GitHub你提交的代码都是可以被其它人看到的 除非你付费 但
  • 西数ZN540如何修改sector size

    写在前面 因需要在ZN540上挂载F2FS 故需要两块盘 一块传统SSD一块ZNS SSD 对于ZN540 信息如下 由于其扇区大小为4KiB 而自己服务器上没有逻辑扇区为4KiB的盘 例如三星883 所以当用883做传统盘的时候 格式化m
  • 基因富集分析 GSEA for time-course

    基因富集分析 Gene Set Enrichment Analysis GSEA 是一种针对全基因组表达谱芯片数据的分析方法 将基因与预定义的基因集进行比较 即综合现有的对基因的定位 性质 功能 生物学意义等信息基础 构建一个分子标签数据库
  • html怎么把视频设置为背景,如何将视频设置为网页背景

    第一步 准备工作 工欲善其事必先利其器 我们首先需要准备一个视频 第二步 html中引入视频 这里我们需要用到了video 标签 然后在source里面写视频的路径 autoplay用来使其自动播放 muted用来使其静音 loop为循环播
  • 数学建模:9 多元线性回归分析

    向前 后逐步回归筛选自变量 检验自变量之间是否多重共线性 计算VIF 内生性 核心变量与解释变量 虚拟变量 个数 分类数 1 否则有多重共线性 stata软件 回归模型假设检验 回归系数假设检验与解释 自变量对因变量的影响程度 标准化回归系
  • 如何检验数据正态分布_数据不符合正态分布,如何统计描述

    10万 文章推荐的科研神器 秒杀 谷歌翻译 不够用 再送两个 2020 04 09 介 绍 我们一般会在文献的统计方法部分看到这样的描述 对于数值变量 首先进行正态性检验 如果各组均满足正态性 采用均数 标准差 进行统计描述 采用t检验进行
  • php类中的私有化构造函数,在类中将构造函数私有化有什么用?

    通过提供私有构造函数 可以防止在此类之外的任何地方创建类实例 提供这种构造函数有几种用例 答 您的类实例是在static方法中创建的 static然后将该方法声明为public class MyClass private MyClass p
  • JAVA产生五位随机验证码

    用Java写出一个程序产生5位验证码 且前四位是字母不限大小写最后一位是数字 解法一 import java util Random public class YanZhengMa public static void main Strin
  • 【华为面试题】栈

    思路 首先 遍历输入的压缩字符串 三种情况 1 遇到字符 将其入栈 2 遇到字符 计算重复次数 将栈中的字符组合成一个字符串 重复拼接后再入栈 3 遇到字母字符 判断下一个字符是否是数字 若是数字 则将当前字母重复拼接后入栈 若不是数字 则
  • mysql的安装与使用

    1 mysql下载与安装 下载解压 下载地址 https dev mysql com downloads mysql 5 7 html downloads 下载到指定位置 如D mysql 5 7 23 winx64 把解压的文件夹bin目
  • 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理(2.3-2.4)

    GitHub计算机系统CSAPP课程资源 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理 2 1 2 2 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理 2 3 2 4 计算机系统课程 笔记总结 CSAPP第三章
  • opencv android 服务包,Unity中使用C++ OpenCV并且打包为Android apk

    我们需要在Unity中使用WebCamTexture获取图像 传送到OpenCV中做处理 然后返回到Unity中作显示 Unity通过调用动态链接库so与OpenCV进行通信 最终程序会打包成APK并且在Android上运行 系统环境 Vi
  • 华为OD机试 Python 【座位调整】

    描述 由于疫情原因 学生之间的座位要保持一定距离 每个学生的左右都要至少有一个空座 给定一个代表座位情况的数组desk 其中1代表有学生坐在那个位置 0代表该位置为空 问你在保持疫情安全距离的前提下 我们还能安排多少学生 输入 一个整数数组
  • cuda运行时库配置问题

    总是遇到一堆问题 这次遇到的问题和这个类似 http cudazone nvidia cn forum forum php mod viewthread tid 483 先看了一些文章 明白了是因为VC在编译和链接过程用的默认库被新库取代
  • vue动态加载页面组件

    问题说明 在开发时遇到一个问题 在同一个页面 局部页面要根据下拉框的选项来动态加载不同的页面 参考 1 Vue 下拉框代码
  • 论文笔记:PhaseNet: a deep-neural-network-based seismic arrival-time pickingmethod

    2018 Geophysical Journal International 1 Intro 1 1 Motivation 地震检测和定位是地震学的基础 地震目录的质量主要取决于到达时间测量的数量和准确性 地震到达时间测量或相位选择通常由网
  • Linux服务器磁盘分区、挂载、卸载及报错处理

    整体操作是 先对磁盘进行格式化 格式化后挂载到需要的挂载点 最后添加分区启动表 以便下次系统启动时自动挂载 一 linux分区 1 Linux来说wulun有几个分区 分给哪一目录使用 他归根结底只有一个根目录 一个独立且唯一的文件结构 L
  • restapi(1)- 文件上传下载服务

    上次对restapi开了个头 设计了一个包括了身份验证和使用权限的restful服务开发框架 这是一个通用框架 开发人员只要直接往里面加新功能就行了 虽然这次的restapi是围绕着数据库表的CRUD操作设计的 但文件类数据在服务端与客户端
  • azkaban简介及azkaban部署、原理和使用介绍

    azkaban简介及azkaban部署 原理和使用介绍 azkaban简介 Azkaban是一套简单的任务调度服务 整体包括三部分webserver dbserver executorserver Azkaban是由Linkedin开源的一
  • Effective C# 摘录(5) - 使用框架

    35 重写函数优于事件处理器 Prefer Overrides to Event Handlers e g 实现Form实例时 选择重写OnMouseDown 方法而不是添加事件句柄OnMouseDown 使用事件有更大的伸缩性 可以在一个