C#学习笔记3:资料型别、型别转换

文中对於实质型别与参考型别的差异,借用了小山的YOUTUBE影片,他讲得简单易懂

资料型别

  • 数值型别(实质型别) Value Type:
    直接在已宣告变数的记忆体上储存一个值。
    https://ithelp.ithome.com.tw/upload/images/20210410/20136522XMryUKvCgX.png

  • 参考型别 Referance Type:
    变数存放的是储存资料所在的记忆体位置(在记忆体HEAP堆积区中)。
    https://ithelp.ithome.com.tw/upload/images/20210410/20136522HVVak9CRFx.png

记忆体HEAP堆积区存放的是不可预测的资料,就是在程序执行後,我才知道要使用多少记忆体。


基本资料型别

https://ithelp.ithome.com.tw/upload/images/20210410/20136522JZmrL7wJNE.png
本图片参考(对不起,这张图做得太好了,直接拿来用一下,谢谢C姐的制作)
邦友CynthiaChuang的文章图片


资料溢位 overflow

当数值指定给某个变数时,若超出他所能储存的容量,就会造成资料溢位,这时IDE就会提示错误。
例如sbyte只能存放 -128 ~ 127 ,如果放入128就会爆掉,就有点像小箱子装不下太大的东西一样。
https://ithelp.ithome.com.tw/upload/images/20210410/20136522LI0ZJgjM6Y.png


浮点数

  • float的部分要注意,把一个浮点数值指定给float型别时,必须在数值後加上"f"或是"F",或使用强制转型,否则会出现错误,因为C#会将浮点数数值预设成double型别,因此要把double型别的数值指定给float型别的变数时,有可会发生overflo,所以要使用型别转换
  • 想要储存小数可以使用 float 或 double,一般使用可以储存数字范围较大的 double
float a;
a = 2.3f
a = (float)2.3;

布林值

  • 布林值只有两种值true 、 false
  • 当需要表达的情形只有两种状态时(是与否、对与错、要与不要),使用布林值来宣告变数最适合。
bool fg = true;

字串

字串是一种参考型别的资料型态,宣告时要用两个双引号包住

string str = "a"
string str1 = "Hello World!";
string str3 = "哈罗 您好";

逸出字元(Escape)
当我们的字串中要显示一些已经被系统拿来用的符号时,就要使用逸出字元[ \ ],在要显示的字元前加上 [ \ ],就会如实的显示。

string str3 = "\"Mary\" 的脾气很好!"; 这时候就会显示"Marry" 的脾气很好!

var

var又称为隐含型别的变数,不用去明确指定变数型别,C#编译器会去自动判断要给予的型别

var i = 10; 判定i为整数型别
var k = 10.2; 判定k为浮点数型别
var skr = "你好!"; 判定skr为字串型别

使用var宣告有以下规范
1.必须指定初始值
2.不能指定函数的参数
3.可用来命名,但会失去宣告的功能
4.一个var一次只能宣告一个变数 (後面不能加[ , ]来宣告多个变数)


型别转换

隐含转型

  • 值域小的型别转换值域大的型别会发生自动型别转换 (把小箱子装进大箱子里的感觉)
  • '把值域大的转成值域小的会发生错误 (把大箱子装进小箱子会装不下)
  • char、浮点数、decimal之间不存在隐含转型
short a = 5;
int i, j = 123;

i = a; a会由short → int
s = j; j是int(值域大),s是short(值域小),会发生错误

强制转型 (明确转型)

变数运算过程中,因转型而失去正确性,或编译器无法成功隐含转型,就要进行强制转型

short s;
int j;
s = (short)j;
将j强制转型成short型别

但强制转行有时会一定会失去正确性

short s;
int j = 12345678;
s = (short)j; 
虽然转型可以成功,但s的值却不会是12345678,因为放下不,这时就失去正确性

转型时要注意,转型後是否为相似型别的值

string str1 = "123";
string str2 = "Hello";
int i, j;

i = (int)str1; 能成功将123指定给int型态的i
j = (int)str2; 字串Hello无法被转换成任何的数值,会发生错误

* 强制转型的其他方法

short s;
int j;
s = Conver.ToInt16(j);
将j强制转型成short型别
short s;
int j;
s = j.ToInt16();
将j强制转型成short型别

也可以使用ToChar、ToSingle、ToDouble、ToSbyte、ToInt32、ToInt64、ToUint32、ToUint16、ToString...等等


<<:  C#学习笔记2:变数、变数宣告与命名规则

>>:  我是一名对python技术感兴趣的亚马逊运营,但是反爬问题困扰了我很久

【心得】checkbox表单实作-待办清单

上一次介绍了各种表单的使用 那麽实战练习必不可少呀! 今天就演练演练自制待办清单吧 首先来看一下想做...

Day31. 单例模式

本文同步更新於blog Singleton Pattern 确保一个类只有一个实例,并提供一个全局...

【Day09】陈述式与表达式

陈述式(Statement) JavaScript 语句类型,用於命令执行指定一系列操作,最大的特徵...

Day 3 | Dart 基本介绍 - Dart vs JS

Dart是什麽? Dart 是一个静态强型别的语言,同时支援物件导向程序设计(OOP)及函数式程序设...

Day 14 虚拟环境

Python虚拟环境的主要目的是为不同的Python项目创建一个彼此独立且隔离的环境。这样我们可以在...