前言

什么是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#粗浅的认识(一)的更多相关文章

  1. 重学c#系列——字典(十一)

    前言 重学c#系列继续更新,简单看一下字典的源码. 看源码主要是解释一下江湖中的两个传言: 字典foreach 顺序是字典添加的顺序 字典删除元素后,字典顺序将会改变 正文 那么就从实例化开始看起,这 ...

  2. 重学Golang系列(一): 深入理解 interface和reflect

    前言 interface(即接口),是Go语言中一个重要的概念和知识点,而功能强大的reflect正是基于interface.本文即是对Go语言中的interface和reflect基础概念和用法的一 ...

  3. 重学c#系列——c# 托管和非托管资源(三)

    前言 c# 托管和非托管比较重要,因为这涉及到资源的释放. 现在只要在计算机上运行的,无论玩出什么花来,整个什么概念,逃不过输入数据修改数据输出数据(计算机本质),这里面有个数据的输入,那么我们的内存 ...

  4. 重学c#系列——异常续[异常注意事项](七)

    前言 对上节异常的补充,也可以说是异常使用的注意事项. 正文 减少try catch的使用 前面提及到,如果一个方法没有实现该方法的效果,那么就应该抛出异常. 如果有约定那么可以按照约定,如果约定有歧 ...

  5. 重学c#系列——list(十二)

    前言 简单介绍一下list. 正文 这里以list为介绍. private static readonly T[] s_emptyArray = new T[0]; public List() { t ...

  6. 重学c#系列——datetime 和 datetimeoffset[二十一]

    前言 简单介绍一下datetime和 datetimeoffset. 正文 了解一个国家的文化,就要了解一个国家的历史. 要了解datetimeoffset,那么很有必要了解一下datetime. 表 ...

  7. 重学数据结构系列之——平衡树之SB Tree(Size Blanced Tree)

    学习来源:计蒜客 平衡树 1.定义 对于每一个结点.左右两个子树的高度差的绝对值不超过1,或者叫深度差不超过1 为什么会出现这样一种树呢? 假如我们依照1-n的顺序插入到二叉排序树中,那么二叉排序树就 ...

  8. 重学c#系列——c#运行原理(二)

    前言 c# 是怎么运行的呢?是否和java一样运行在像jvm的虚拟机上呢?其实差不多,但是更广泛. c# 运行环境不仅c#可以运行,符合.net framework 开发规范的都可以运行. c# 程序 ...

  9. 重学c#系列——c# 托管和非托管资源与代码相关(四)

    前言 这是续第三节. 概况垃圾回收与我们写代码的关系: 强引用和弱引用 针对共享 Web 承载优化 垃圾回收和性能 应用程序域资源监视 正文 强引用和弱引用 垃圾回收器不能回收仍在引用的对象的内存-- ...

随机推荐

  1. Vue中解决新脚手架3创建项目的移动端双击屏幕放大,双手拉动放大的方法

    替换新版vue-cli创建项目的public>index.html <!DOCTYPE html> <html lang="en"> <head ...

  2. 如何向这些CA来申请数字证书呢?

    申请的过程大致是: 1.自己本地先生成一对密匙,然后拿着自己的公匙以及其他信息(比如说企业名称啊什么的)去CA申请数字证书. 2.CA在拿到这些信息后,会选择一种单向Hash算法(比如说常见的MD5) ...

  3. Firefox中input元素,不能重新获取焦点函数focus()

    js校验输入框的函数: function is_number(feild) { var strRegExp = /^\d+(\.\d{1,2})?$/; if (!strRegExp.test(fei ...

  4. Centos7 systemctl添加自定义系统开机服务

    Centos7的服务systemctl脚本存放在: /usr/lib/systemd/ 有系统(system)和用户(user)之分,需要开机不登陆就能运行的程序,存下系统服务里,即:/usr/lib ...

  5. Uint47 calculator【map数组+快速积+各种取余公式】

    Uint47 calculator 题目链接(点击) In the distant space, there is a technologically advanced planet. One day ...

  6. FR6安装问题备注

    好久以前偶尔用用FR,采用安装执行文件的方式(5.3版安装没问题).及其编译包的方式都没有问题,最近在6.x提示如下(fr6_5_11_all_ent等),不知是系统原因还是文件问题,未解: ---- ...

  7. 一文读懂Redis的四种模式,单机、主从、哨兵、集群

    少点代码,多点头发 本文已经被GitHub收录,欢迎大家踊跃star 和 issues. https://github.com/midou-tech/articles 入职第一周,我被坑了 最近刚入职 ...

  8. 基于Web的监控系统的开发进行分布式和现代生产(外文翻译)

    摘要 近年来,Web技术发展迅速.尤其是网络浏览器增强了其功能因为JavaScript,CSS3和HTML5的改进.因此,功能越来越丰富的基于Web的软件解决方案功能范围可用.通过使用响应式网页设计( ...

  9. win10 VirtualBox无法打开,COM对象创建失败

    https://blog.csdn.net/txwtech/article/details/101900464 VirtualBox无法打开,打开后提示创建COM对象失败: 被召者 RC: E_NOI ...

  10. Redis快照原理详解

    本文对Redis快照的实现过程进行介绍,了解Redis快照实现过程对Redis管理很有帮助. Redis默认会将快照文件存储在Redis当前进程的工作目录中的dump.rdb文件中,可以通过配置dir ...