重学c#系列——对c#粗浅的认识(一)
前言
什么是c#呢?
首先你是如何读c#的呢?c sharp?或者c 井?
官方读法是:see sharp。
有没有发现开发多年,然后感觉名字不对。
tip:为个人重新整理,如学习还是看官网,c# 文档天下无敌。
正文
c#和java一样,他们之间有很多故事,尤其是官司,c#同样是一门面向对象的语言,同样也支持面向组件编程。
复制一下面向对象和面向组件编程的概念:
面向对象技术的基础是封装--接口与实现分离,面向对象的核心是多态--这是接口和实现分离的更高级升华,使得在运行时可以动态根据条件来选择隐藏在接口后面的实现,面向对象的表现形式是类和继承。
面向对象的主要目标是使系统对象化,良好的对象化的结果,就是系统的各部分更加清晰化,耦合度大大降低。
面向组件技术建立在对象技术之上,它是对象技术的进一步发展,类这个概念仍然是组件技术中一个基础的概念,但是组件技术更核心的概念是接口。
组件技术的主要目标是复用--粗粒度的复用,这不是类的复用,而是组件的复用,如一个dll、一个中间件,甚至一个框架。
一个组件可以有一个类或多个类及其它元素(枚举、)组成,但是组件有个很明显的特征,就是它是一个独立的物理单元,经常以非源码的形式(如二进制,IL)存在。
一个完整的组件中一般有一个主类,而其它的类和元素都是为了支持该主类的功能实现而存在的。
为了支持这种物理独立性和粗粒度的复用,组件需要更高级的概念支撑,其中最基本的就是属性和事件,在对象的技术中曾一度困扰我们的类之间的相互依赖问题/消息传递问题,迄今为止我所知道最好的解决方案就是事件。
要理解组件思想,首先要理解事件的思想和机制。
c# 作为一门语言,那么内存管理的关键,c#有自动回收机制,为自动回收无法访问的对象,当然这针对于托管对象,非托管的还需自我管理。
这里介绍一下非托管对象:
非托管对象指.net不知道如何回收的资源,最常见的一类非托管资源是包装操作系统资源的对象,例如文件、窗口、网络连接、数据库连接、画刷、图标等。这类资源,垃圾回收器在清理的时候会调用Object.Finalize()方法。
默认情况下,方法是空的,对于非托管对象在此方法中需要编写回收非托管对象的代码,以便垃圾回收器正确回收。(例如我们通常打开文件、图片等后需要进行Close()或者Dispose()去释放)。
对于任何一门有垃圾自动回收装置,非托管资源基本差不多,因为作为托管程序不可能知道你想要啥时候断开网络连接、啥时候释放数据库连接,这些不用去记,如果是主观因素的基本都是非托管的。
C# 采用统一的类型系统。官方这样解释道:
所有 C# 类型(包括 int 和 double 等基元类型)均继承自一个根 object 类型。
因此,所有类型共用一组通用运算,任何类型的值都可以一致地进行存储、传输和处理。
此外,C# 还支持用户定义的引用类型和值类型,从而支持对象动态分配以及轻量级结构的内嵌式存储。
这个自定义引用类型好理解,这个自定义值类型是那些呢?
自定义值类型就是struct和emun,也就是结构和枚举类型。
但是这个轻量级结构的内嵌式存储是神马,我好像没有用过,只用过内嵌式数据库sqlite。
案例
hello word
既然是重学,那么就从hello word开始吧。
Console.WriteLine("Hello World!");
然后输出:

欢呼,记得在生涯中第一行是用c语言写的。
声明和使用变量
string aFriend = "Bill";
Console.WriteLine(aFriend);
c# 的官方开源命名是驼峰式的,所以我们一般命名也应该保存一直。
方法名字首字母大写,而java则是方法也是驼峰式。
类命名和java一样是首大写。
使用字符串
string firstFriend = "Maria";
string secondFriend = "Sage";
Console.WriteLine($"My friends are {firstFriend} and {secondFriend}");
值得关注是内嵌字符串,内嵌字符串有很多门道的,比如说{}是一个int,那么就是会参数装箱和拆箱操作的,我们需要手动tostring。
然后Console.WriteLine 实际上是自动调用了tostring方法,如果我们一个类没有重写tostring,那么将会调用object的tostring方法。
字符串有一些自带的方法帮我们处理字符串。
比如说:
string greeting = " Hello World! ";
Console.WriteLine($"[{greeting}]");
string trimmedGreeting = greeting.TrimStart();
Console.WriteLine($"[{trimmedGreeting}]");
TrimStart帮助我们去除了前面的空格,但是在删除后和删除前是两个不同的字符串,所以我们在频繁操作字符串的时候需要使用StringBuilder,
他会帮我们作为缓存,而不是直接去操作字符串。
字符串对象同样帮助提供了搜索字符函数:
如:
string songLyrics = "You say goodbye, and I say hello";
Console.WriteLine(songLyrics.StartsWith("you"));//false
帮助查找是否是You开头的,StartsWith是区分大小写的。
当然还有其他的函数如:contains,是否包含等,基本常规操作都有,不常规的就正则表达吧。
总结
上面只是粗浅的认识。但是可以看出c#一些关键的地方,垃圾回收、异常处理等一些细节之处。
c# 感觉有一个最大的优点,就是版本控制比较好,不会出现python 这种2和3断层的存在,语法不会存在很大的差异,一般是引入语法糖和特性,不过c# 9.0的操作跨越时代,幅度有点大,史上最先进的语言,根据以往经验,基本上其他语言会抄一波的。
疑惑
存在的疑惑:
c#的轻量级结构的内嵌式存储是什么呢?
重学c#系列——对c#粗浅的认识(一)的更多相关文章
- 重学c#系列——字典(十一)
前言 重学c#系列继续更新,简单看一下字典的源码. 看源码主要是解释一下江湖中的两个传言: 字典foreach 顺序是字典添加的顺序 字典删除元素后,字典顺序将会改变 正文 那么就从实例化开始看起,这 ...
- 重学Golang系列(一): 深入理解 interface和reflect
前言 interface(即接口),是Go语言中一个重要的概念和知识点,而功能强大的reflect正是基于interface.本文即是对Go语言中的interface和reflect基础概念和用法的一 ...
- 重学c#系列——c# 托管和非托管资源(三)
前言 c# 托管和非托管比较重要,因为这涉及到资源的释放. 现在只要在计算机上运行的,无论玩出什么花来,整个什么概念,逃不过输入数据修改数据输出数据(计算机本质),这里面有个数据的输入,那么我们的内存 ...
- 重学c#系列——异常续[异常注意事项](七)
前言 对上节异常的补充,也可以说是异常使用的注意事项. 正文 减少try catch的使用 前面提及到,如果一个方法没有实现该方法的效果,那么就应该抛出异常. 如果有约定那么可以按照约定,如果约定有歧 ...
- 重学c#系列——list(十二)
前言 简单介绍一下list. 正文 这里以list为介绍. private static readonly T[] s_emptyArray = new T[0]; public List() { t ...
- 重学c#系列——datetime 和 datetimeoffset[二十一]
前言 简单介绍一下datetime和 datetimeoffset. 正文 了解一个国家的文化,就要了解一个国家的历史. 要了解datetimeoffset,那么很有必要了解一下datetime. 表 ...
- 重学数据结构系列之——平衡树之SB Tree(Size Blanced Tree)
学习来源:计蒜客 平衡树 1.定义 对于每一个结点.左右两个子树的高度差的绝对值不超过1,或者叫深度差不超过1 为什么会出现这样一种树呢? 假如我们依照1-n的顺序插入到二叉排序树中,那么二叉排序树就 ...
- 重学c#系列——c#运行原理(二)
前言 c# 是怎么运行的呢?是否和java一样运行在像jvm的虚拟机上呢?其实差不多,但是更广泛. c# 运行环境不仅c#可以运行,符合.net framework 开发规范的都可以运行. c# 程序 ...
- 重学c#系列——c# 托管和非托管资源与代码相关(四)
前言 这是续第三节. 概况垃圾回收与我们写代码的关系: 强引用和弱引用 针对共享 Web 承载优化 垃圾回收和性能 应用程序域资源监视 正文 强引用和弱引用 垃圾回收器不能回收仍在引用的对象的内存-- ...
随机推荐
- 【Transferable NAS with RL】2018-CVPR-Learning Transferable Architectures for Scalable Image Recognition
Transferable NAS with RL 2018-CVPR-Learning Transferable Architectures for Scalable Image Recognitio ...
- SUBSTRING / CHARINDEX_函数随手练_2
SUBSTRING / CHARINDEX_函数随手练_2环境:MSSQL 2014(AdventureWorks2008R2附加到2014中的表 Location) /* Learning SQL ...
- Elasticsearch去重查询/过滤重复数据(聚合)
带家好,我是马儿,这次来讲一下最近遇到的一个问题 我司某个环境的es中被导入了重复数据,导致查询的时候会出现一些重复数据,所以要我们几个开发想一些解决方案,我们聊了聊,相出了下面一些方案: 1.从源头 ...
- 文本溢出后,隐藏显示"..."和margin边距重叠
一.隐藏加省略 单行文本: overflow: hidden; white-space: nowrap; text-overflow: ellipsis; 多行文本: overflow: hidden ...
- Android学习笔记Tab代替ActionBar做的顶部导航
1.先准备5个Fragement作为标签页 package com.lzp.youdaotab; import android.os.Bundle; import android.view.Layou ...
- 事务的特性ACID、隔离级别
1.事务特性ACID 1.1 事务的四大特性 1.原子性(Atomicity) 事务包装的一组sql,要么都执行成功,要么都失败.这些操作是不可分割的. 2.一致性(Consistency) 数据库的 ...
- Thunk函数的使用
Thunk函数的使用 编译器的求值策略通常分为传值调用以及传名调用,Thunk函数是应用于编译器的传名调用实现,往往是将参数放到一个临时函数之中,再将这个临时函数传入函数体,这个临时函数就叫做Thun ...
- WeChair项目Alpha冲刺(7/10)
团队项目进行情况 1.昨日进展 Alpha冲刺第七天 昨日进展: 前端:页面修改和完善,安排页面美化 后端:和前端成功交互,数据解密成功 数据库:修改数据表属性,与后端部署数据库交互 2.今日安 ...
- NodeJs将异步方法改为同步以上传文件为例
[本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 下面这个例子既写 ...
- Newtonsoft 六个超简单又实用的特性,值得一试 【下篇】
一:讲故事 上一篇介绍的 6 个特性从园子里的反馈来看效果不错,那这一篇就再带来 6 个特性同大家一起欣赏. 二:特性分析 1. 像弱类型语言一样解析 json 大家都知道弱类型的语言有很多,如: n ...