前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C Sharp(一)

C Sharp(一)

作者头像
1ess
发布于 2021-11-01 08:04:10
发布于 2021-11-01 08:04:10
1.7K0
举报
文章被收录于专栏:0x7c00的专栏0x7c00的专栏

C Sharp(一)

發佈於 2018-10-15

之前本来想学习一下 NodeJS,考虑到最近一直在使用 C#(主要使用 .Net Core 的 MVC 和 API),并且之前也仔细地研究过一段时间的 C#,.Net 平台的发展也有上升趋势,最近微软收购 Github,打算整合自己的平台,还有 Visual Studio 这一个宇宙第一 IDE 加持,所以就打算把后台技术栈先放在 .Net 上。 目前的打算是将 C# 的知识都过一遍,再逐渐学习一些常用类库,最后把 ASP.Net Core MVC 和 API 都好好看看。 这次我打算边复习边将 C# 中的概念与其他语言做一下对比,以方便有其他语言基础的同学可以更好地理解在 C# 中的相似概念。

概述


要注意在使用 .Net 进行开发时,我们要知道 Solution 和 Project 的区别:

  • Solution 是针对需求的一个总的解决方案
  • Project 则用来解决具体的某个问题

各类 C# 可编写的程序

  • Console
  • WinForm(old)
  • WPF
  • WebForm(old)
  • WebMVC
  • WCF
  • WF
  • UWP

我们可以使用 C# 写出上述各种类型的应用,有的已经过时了,现在主流使用技术是: WebMVC、WebAPI 以及 WCF。

类型和命名空间

C# 程序的本质是由多个类型声明组成。命名空间则是与某个名称相关联的一组类型声明。(在写 Objective-C 或者 Swift 时,是没有命名空间的概念,所以官方给出的最佳实践是使用前缀的方式来区分不同类型。)

标识符

C# 中标识符规则:

  • 字母和下划线可以出现在任意位置
  • 数字可以放在除了首位的任意位置
  • @字符只可以出现在首位,但不推荐

C# 语言的标识符是大小写敏感的,这一点跟 Objective-C,Swift,JavaScript 都一样。

语句

C# 中的语句必须以分号作为结束标志。 块是由成对的大括号包围的 0 条或多条语句序列,在语法上,相当于一条语句。

  • 在语法上只需要一条语句,而一条语句无法表达时,就需要使用块
  • 某些特定的程序结构只能使用块
  • 虽然简单语句以号结尾,但块后面不跟分号(这样会多解析一条空语句)

字符串插值

新版 C# 可以使用字符串插值,类似 JavaScript 中的字符串插值:

var a = 10; var b = 20; var str = $"a + b= {a + b}";

注释

C# 允许三种注释:

  • 单行注释 //
  • 多行注释 /**/
  • 文档注释 ///

类型,存储和变量


如果要描述程序代码特征的话,我们可以说 C 程序就是一组函数和数据类型,C++ 程序就是一组函数和类,而 C# 则是一组类型声明。

namespace MyProgram { DeclarationOfTypeA DeclarationOfTypeB class C { static void Main() { } } }

类型是一种模板

我们学习 C#,其实就是学习如何创建和使用类型,所以我们需要了解什么是类型。 我们可以把类型想象成创建数据结构的模板,模板本身不是数据结构,但可以描述由改模板构造的对象特征。 类型由下面元素定义:

  • 名称
  • 保存数据成员的结构
  • 一些行为和约束

比如,int 类型:

  • 名称: int
  • 结构: 4 字节
  • 行为: 32 位整数

实例化类型

从模板创建实际对象的过程,就称为实例化该类型。

  • 通过实例化类型创建的对象,可以称为对象,也可以称为实例
  • C# 中,每个数据项都是某种类型的实例

数据成员和函数成员

像 short,long 等这样的类型称为简单类型,只能存储一个数据项。

其他的类型可以存储多个数据项,如数组类型就可以存储多个相同类型的数据项。这些数据项称为数组元素,通过索引来获取每个数组元素。C# 数组这一特征与 Objective-C 相同,与 JavaScript 的特征不同。

然而,另外一些类型可以包含不同类型的数据项,这些类型中的数据项个体称为 成员。 有两种成员:

  • 数据成员
  • 函数成员

预定义类型

C# 提供了 16 种预定义类型,包括 13 种简单类型和 3 种非简单类型。 所有预定义类型由全小写字母组成,预定义的简单类型包括以下 3 种:

  • 11 种数值类型:
    1. 不同长度的有符号和无符号整数类型
    2. 浮点数类型: float 和 double
    3. 高精度小数类型: decimal
  • 1 种 Unicode 字符类型: char
  • 1 种布尔类型: bool

与 Objective-C 或 JavaScript 不同,C# 中的数值类型不具有布尔含义。

3 种非简单类型:

  • string: Unicode 字符数组
  • object: 所有其他类型的基类
  • dynamic

注意: 在 C# 程序中,应使用小写的 C# 类型名称而不是大写的 .Net 类型名称。

用户定义类型

有 6 种类型可以由用户自己创建:

  • class 类型
  • struct 类型
  • array 类型
  • enum 类型
  • delegate 类型
  • interface 类型

类型通过类型声明创建,类型声明包含以下信息:

  • 要创建的类型种类
  • 新类型名称
  • 对每个成员的声明(array 和 delegate 除外,他们没有命名成员)

一旦声明了类型,就可以像预定义类型一样使用了。

预定义类型已经由系统创建好了,我们直接使用即可,而用户定义类型,我们使用前需要先进行声明,再使用。

值类型和引用类型

对于非成员数据的存储(如函数中的局部变量):

  • 值类型存储于栈内存
  • 引用类型的 数据部分 存储于堆内存,引用部分 存放在栈内存

对于成员数据,存储有些不同:

  • 引用类型的 数据部分 始终存放在堆内存
  • 值类型的对象,或者引用类型的 引用部分,可能存储在栈内存,也可能存储在堆内存,取决于执行环境

C# 类型分类

  • 预定义类型: 对于简单类型都是值类型,非简单类型都是引用类型
  • 用户定义类型: struct 和 enum 类型是值类型,其他 4 种是引用类型

变量

C# 提供了 4 中变量:

  • 本地变量
  • 字段
  • 参数
  • 数组元素

变量在使用前必须声明。变量声明完成了两件事:

  • 给变量命名,并关联了一种类型
  • 编译器为它分配了一块内存

我们还可以直接在声明时初始化变量。 一些类型的变量如果在声明时没有初始化,那么会被自动设置为默认值。 注意: 本地变量和参数不会被自动初始化,类字段,结构字段和数组元素会被自动初始化。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-10-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C Sharp(七)
注意: 数组是引用类型,数组元素可以是值类型也可以是引用类型,这一点与 Ocjective-C 不同,Ocjective-C 中的数组元素不能是基本类型。
1ess
2021/11/01
8450
C Sharp(二)
上一篇,我们说过用户定义类型有 6 种,其中最重要的就是类类型,类是面向对象的基础。 程序的数据和功能被组织为逻辑上相关的数据项和函数的封装集合就称为类(class)。 类是一种能存储数据并执行代码的数据结构,包含数据成员和函数成员。 数据成员包括:
1ess
2021/11/01
6510
《C#图解教程》读书笔记之二:存储、类型和变量
  (1)C程序是一组函数和数据类型,C++程序是一组函数和类,而C#程序是一组类型声明;
Edison Zhou
2018/08/20
4550
《C#图解教程》读书笔记之二:存储、类型和变量
C Sharp(十二)
没有泛型的时候,我们封装的行为都是作用在特定类型上的,但是,很多时候如果我们把行为提取或重构出来,使其可以应用到很多类型上去的话,那么就会更有意义。这也是泛型出现的原因。
1ess
2021/11/01
8910
C# 7.0简而言之 -- 02. C#基础 (1)
语句1里面计算了表达式(expression) 12 * 30, 并把结果保存到了本地变量x里面, x是整型类型.
solenovex
2018/05/03
1.1K0
C# 7.0简而言之 -- 02. C#基础 (1)
C#编程-003.数据类型
换句话说,它们指的是一个内存位置。使用多个变量时,引用类型可以指向一个内存位置。如果内存位置的数据是由一个变量改变的,其他变量会自动反映这种值的变化。
哆哆Excel
2024/01/02
1410
C#编程-003.数据类型
Swift教程(九)--类和结构体
类和结构体是一种多功能且灵活的构造体。通过使用与现存常量、变量、函数完全相同的语法来在类和结构体当中定义属性和方法以添加功能。
roc
2019/07/31
1.2K0
C#基础深入学习01
值类型的数据存储在内存的栈中,引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。
Echo_Wish
2023/11/30
2130
C#中值类型和引用类型及类型的转换
版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/article/details/52911145
空空云
2018/09/27
2.7K0
浅谈C#数组(一)
  如果需要使用同一类型的多个对象,可以使用数组和集合(后面介绍)。C#用特殊的记号声明,初始化和使用数组。Array类在后台发挥作用,它为数组中的元素排序和过滤提供了多个方法。使用枚举器,可以迭代数组中的所有元素。   如果需要使用不同类型的多个对象,可以使用Tuple(元组)类型。
全栈程序员站长
2022/09/07
1K0
浅谈C#数组(一)
C Sharp(五)
与其它语言一样,C# 有大于、大于等于、小于、小于等于、等于、不等于 6 种关系运算符。 需要注意的是: 与 Objective-C 和 JavaScript 中不同,C# 的数字不具有布尔含义。 对于比较相等时,除了 string 和 delegate 类型的比较是深比较,其他引用类型的比较都是浅比较,只要指向堆中的对象是同一个对象就相等。
1ess
2021/11/01
9290
《CLR via C#》笔记:第3部分 基本类型(2)
本博客所总结书籍为《CLR via C#(第4版)》清华大学出版社,2021年11月第11次印刷(如果是旧版书籍或者pdf可能会出现书页对不上的情况) 你可以理解为本博客为该书的精简子集,给正在学习中的人提供一个“glance”,以及对于部分专业术语或知识点给出解释/博客链接。 【本博客有如下定义“Px x”,第一个代表书中的页数,第二个代表大致内容从本页第几段开始。(如果有last+x代表倒数第几段,last代表最后一段)】 电子书可以在博客首页的文档-资源归档中找到,或者点击:传送门自行查找。如有能力
[Sugar]
2022/09/21
8470
Swift 类和结构体
类和结构体有着类似的定义方式。我们通过关键字class和struct来分别表示类和结构体,并在一对大括号中定义它们的具体内容:
赵哥窟
2020/07/22
1.3K0
C Sharp(六)
把一个结构赋值给另一个结构,就是将这个结构的值复制给另一个结构。需要注意与类的赋值的不同。
1ess
2021/11/01
4670
C# .NET面试系列一:基础语法
请注意,在处理字符时,需要确保其值在 byte 类型的范围内。如果要将字符串赋值给 byte 类型,可能需要使用 Convert 类或其他适当的转换方法。
GoodTime
2024/03/07
3190
C# .NET面试系列一:基础语法
【深入浅出C#】章节10: 最佳实践和性能优化:内存管理和资源释放
C#对象池示例代码: 以下是一个简单的C#对象池示例,用于管理字符串对象。注意,这只是一个示例,实际应用中可以根据需要自定义更复杂的对象池。
喵叔
2023/09/11
1.5K0
5年前, "以太坊大脑"送给V神一份神秘大礼; 今天, V神将它给了你...
Solidity 的语法概念最早由 Gavin Wood 在2014年提出,后期则由 Christian Reitwiessner 所领导的以太坊团队 Solidity 接手开发。该语言是针对以太坊虚拟机(EVM)所设计的5种语言之一(除 Solidity 外,还包括 Serpent、LLL、Vyper(实验中)和 Mutan(已弃用)),是目前 EVM 上最流行的语言。
区块链大本营
2019/04/28
1.9K0
5年前, "以太坊大脑"送给V神一份神秘大礼; 今天, V神将它给了你...
Java程序设计(Java9版):第4章 简单复合类型
第4章 简单复合类型 4.1 数组 在C语言中,数据类型除了基本数据类型之外,还存在着大量复合数据类型。数组就是一类最简单且非常重要的复合数据类型,数组是具有相同类型变量的顺序存储的集合。几乎所有的程
程裕强
2018/01/02
1.2K0
C Sharp(十三)
这一篇,我们看看 C# 中的枚举器和迭代器的基本概念。 之前我们说过可以使用 foreach 来遍历数组元素,本篇来讨论为什么数组可以使用 foreach 语句处理,我们可以还使用迭代器来使得自定义类型也可以使用 foreach。
1ess
2021/11/01
6630
如何理解变量?
看起来,它并不是一件需要特别的知识铺垫才能正确理解的东西。但是,也许正因为如此,我们总是并没有很好地厘清这个概念的内涵。它和数学中的变量是一个概念吗?
高一峰
2020/09/22
1.5K0
如何理解变量?
相关推荐
C Sharp(七)
更多 >
LV.1
这个人很懒,什么都没有留下~
作者相关精选
换一批
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档