我对C#的理解

时间:2022-10-29 22:12:15

C#里面所有东西都可以看作对象.接口,类,枚举等等.

类是最常用的,可以继承别的接口,类等,就会自动拥有别人的功能.

接口是类的概要.给别人看的协议,好像一个人对外做出的承诺.

抽象类是实现了部分承诺,好像做了半生不熟的饭,还不能吃.常用在作为一批相同对象的基类.

类只是蓝图,文档.还不是对象,要New之后就是对象了.实例的方式很多.

类里面有属性,方法,字段,事件,命令等;

类主要是现实世界内的名词.比较复杂的,有多个部件组成的东西.

属性是对象拥有的状态.比如你的年龄,相貌等;其实就是提供2个方法来管理内部字段.为了保证字段的合法性,比如年龄不能为负,也不能大于1000年;

在Wpf里面,属性的设置里面常常加上一个属性变更通知方法,用来更新UI界面.

如: set { SetProperty(ref fieldName  , value); }

列表数组如果想在内部有变动时候通知UI界面,需要继承ObservableCollection<T>即可

如 public ObservableCollection<string> 变化带通知数组 { get; set; }

依赖属性很好.继承来的属性如果没变化,就不占自己的内存.需要属性类型为DependencyObject;

附加属性是个好东西,本来自己没有的属性,可以直接拿来用.相当于吸星大法.

事件就是类对于其他类的变化的反应.相当于人的感官.由外部的刺激引发自己的方法.或者向外部宣传自己的状态变化.如老板发红包了,马上就去抢一下.主要是对外界环境变化的一种反应.怎么反应还是调用自己的方法.优点就是解耦了事件源和处理者.不管谁发红包.我都想去抢一个.

先声明一个事件类

public class 弹出消息Event : PubSubEvent<I消息> {  }

在订阅事件发生时候通知我,

IEventAggregator 新闻部;

新闻部.GetEvent<弹出消息Event>().Subscribe(弹出消息处理, true);

方法就是对象拥有的技能;主要是动词.比如:写(代码),跑(步),听(音乐),可以不返回结果,或者只能返回1个结果.参数可以有多个.但也不建议很多个,会看的眼晕.

如果想返回多个结果,可以用自定义类型,或者元组Tuple<T1, T2> 组合最多8个;

扩展方法很好用,可以在不改变原有类代码的基础上增加新功能.适合为别人写好的类库添加自己想要的功能.只能增加实例的扩展,不能增加类的静态方法.如增加百分比转换

public static string To百分比(double 数值)

{ return 数值.ToString("p"); }

为数值增加范围限制:

public static T 范围限制<T>(this T 待测值, T 最小, T 最大) where T : IComparable<T>

{

var min = 待测值.CompareTo(最小) > 0 ? 待测值 : 最小;

var max = min.CompareTo(最大) > 0 ? 最大 : min;

return max;

}

命令就是把方法包装一下,对外提供的服务.方便前台界面和后台代码关联.

常见的public ICommand 干活Command { get; set; }

干活Command = new DelegateCommand<object>(工作方法Action);

可以不带参数或者带1个参数.

参数:

对象可以做为参数传递给别人.加工处理后再返回.这是最常见的方式.

如给老婆一堆脏衣服,老婆会给我一堆干净衣服.

public 衣服 老婆(衣服 脏衣服)

{

return new 衣服("干净");

}

方法也可以做为参数.等于把处理方法传递给别人.好像是苹果找富士康外包:提供材料,提供生产管理方式.

常用的方法有Action<参数1,参数2>;不返回结果.

Func<参数1,结果>;加工参数后返回结果.

如给老婆大米,再告诉她蒸米方法.就能做出一顿米饭来.

public Func<大米,米饭> 蒸米=  米=> { return new 米饭("可口"); };

public 米饭 老婆(Func<大米, 米饭> 蒸米方法, 大米 东北大米)

{

return 蒸米(东北大米);

}

LINQ

LINQ是查询数据的强大方便工具.只需一套方法,可以查询对象,SQL,XML等等数据源.常用的就是where 过滤,orderby 排序,toList投影出来. 如果数据多,分页显示也方便用Skip.

var find = from 车次 in 所有车次

where 车次.出发车站 == 南京

&& 车次.到达车站 == 苏州

&& 车次.出发时间 >= DateTime.Now.AddHours(2)

orderby 车次.出发时间

select 车次;

var 一页数据 = find数据.Skip(页数 * 每页显示).Take(每页显示);

查询到的数据常常在后台进程,如果要推送到界面.可以在界面进程调用更新.异步调用也行.

var UI线程= Application.Current.MainWindow.Dispatcher;

UI线程.Invoke(() => { 更新数据(新数据)}, DispatcherPriority.Normal);

学习linq有个好工具,LinqPad,

南京找工作中…欢迎推荐;微信FMTV365

我对C#的理解的更多相关文章

  1. 理解CSS视觉格式化

    前面的话   CSS视觉格式化这个词可能比较陌生,但说起盒模型可能就恍然大悟了.实际上,盒模型只是CSS视觉格式化的一部分.视觉格式化分为块级和行内两种处理方式.理解视觉格式化,可以确定得到的效果是应 ...

  2. 彻底理解AC多模式匹配算法

    (本文尤其适合遍览网上的讲解而仍百思不得姐的同学) 一.原理 AC自动机首先将模式组记录为Trie字典树的形式,以节点表示不同状态,边上标以字母表中的字符,表示状态的转移.根节点状态记为0状态,表示起 ...

  3. 理解加密算法(三)——创建CA机构,签发证书并开始TLS通信

    接理解加密算法(一)--加密算法分类.理解加密算法(二)--TLS/SSL 1 不安全的TCP通信 普通的TCP通信数据是明文传输的,所以存在数据泄露和被篡改的风险,我们可以写一段测试代码试验一下. ...

  4. node&period;js学习(三)简单的node程序&amp&semi;&amp&semi;模块简单使用&amp&semi;&amp&semi;commonJS规范&amp&semi;&amp&semi;深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  5. 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念

    一.前言     DDD(领域驱动设计)的一些介绍网上资料很多,这里就不继续描述了.自己使用领域驱动设计摸滚打爬也有2年多的时间,出于对知识的总结和分享,也是对自我理解的一个公开检验,介于博客园这个平 ...

  6. 学习AOP之透过Spring的Ioc理解Advisor

    花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍.那看书有什么用呢?主要还是扩展视野,毕竟书是别 ...

  7. ThreadLocal简单理解

    在java开源项目的代码中看到一个类里ThreadLocal的属性: private static ThreadLocal<Boolean> clientMode = new Thread ...

  8. JS核心系列:理解 new 的运行机制

    和其他高级语言一样 javascript 中也有 new 运算符,我们知道 new 运算符是用来实例化一个类,从而在内存中分配一个实例对象. 但在 javascript 中,万物皆对象,为什么还要通过 ...

  9. 深入理解JS 执行细节

    javascript从定义到执行,JS引擎在实现层做了很多初始化工作,因此在学习JS引擎工作机制之前,我们需要引入几个相关的概念:执行环境栈.全局对象.执行环境.变量对象.活动对象.作用域和作用域链等 ...

  10. 浅谈我对DDD领域驱动设计的理解

    从遇到问题开始 当人们要做一个软件系统时,一般总是因为遇到了什么问题,然后希望通过一个软件系统来解决. 比如,我是一家企业,然后我觉得我现在线下销售自己的产品还不够,我希望能够在线上也能销售自己的产品 ...

随机推荐

  1. &period;NET Core的文件系统&lbrack;5&rsqb;:扩展文件系统构建一个简易版&ldquo&semi;云盘&rdquo&semi;

    FileProvider构建了一个抽象文件系统,作为它的两个具体实现,PhysicalFileProvider和EmbeddedFileProvider则分别为我们构建了一个物理文件系统和程序集内嵌文 ...

  2. SQLServer&lpar;MSSQL&rpar;、MySQL、SQLite、Access相互迁移转换工具 DB2DB v1&period;1

    最近公司有一个项目,需要把原来的系统从 MSSQL 升迁到阿里云RDS(MySQL)上面.为便于测试,所以需要把原来系统的所有数据表以及测试数据转换到 MySQL 上面.在百度上找了很多方法,有通过微 ...

  3. Thinkpad X240在Centos 7下使用ID 138a&colon;0017或者vfs5011指纹识别

    我的笔记本是ThinknPad X240,自带的指纹识别器,通过命令lsusb可以查看: [zz@zz ~]$ lsusb Bus 001 Device 002: ID 24ae:2003 Bus 0 ...

  4. 2013&equals;12&equals;2 bitree

    #include "stdio.h" #include "stdlib.h" #define OVERFLOW -1 #define ERROR -1 #def ...

  5. errorPlacement的位置问题

    做一个前端的验证,使用了JQUERY.Validate 在errorPlacement上纠结了半天: 百度大多数都是一个答案: errorPlacement: function(error, elem ...

  6. select标签 禁止选择但又能通过序列化form表单传值到后台

    前言 项目开发中,我们可能会碰到这样的需求:select标签,禁止选择但又能通过序列化form表单传值到后台,但是当我们使用disabled="disabled"时发现,无法序列化 ...

  7. load file within a jar

    String examplejsPrefix = "example"; String examplejsSuffix = "js"; String exampl ...

  8. hdu 4417 Super Mario 树状数组&vert;&vert;主席树

    Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Prob ...

  9. Solr 同义词搜索

    1.  进入solr配置目录 cd /usr/local/solr/solrhome/collection1/conf vi schema.xml 增加配置节 <fieldType name=& ...

  10. 获取访问者ip及其所在城市

    原本使用新浪Api,然后发现不行了,以下小编重新查找了几个,个人推荐太平洋的接口 1.首先获取真实ip $ip = $_SERVER['REMOTE_ADDR']; 2.要知道的Api接口 几个接口$ ...