C#学习 part2 C#基础-1

发布于:2024-03-11 ⋅ 阅读:(59) ⋅ 点赞:(0)

数据类型

值类型

值类型变量可以直接分配给一个值。它们是从类 System.ValueType 中派生的。

值类型直接包含数据。比如 int、char、float,它们分别存储数字、字符、浮点数。当您声明一个 int 类型时,系统分配内存来存储值。

类型 描述 范围 默认值
bool 布尔值 True或False False
byte 8位无符号整数 0到255 0
char 16位Unicode字符 U+0000到U+ffff ‘\0’
decimal 128位精确的十进制值,28-29有效位数 ( − 7.9 × 1 0 28 到 7.9 × ) / 1 0 0 − 28 (-7.9\times10^{28}到7.9\times)/10^{0-28} (7.9×10287.9×)/10028 0.0M
double 64位双精度浮点型 ( + / − ) 5.0 × 1 0 − 324 − ( + / − ) 1.7 × 1 0 308 (+/-)5.0\times10^{-324}-(+/-)1.7\times10^{308} (+/)5.0×10324(+/)1.7×10308 0.0D
float 32位单精度浮点型 − 3.4 × 1 0 38 − + 3.4 × 1 0 38 -3.4\times10^{38}-+3.4\times10^{38} 3.4×1038+3.4×1038 0.0F
int 32有符号整数类型 -2,147,483,648 到 2,147,483,647 0
long 64有符号整数类型 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 0L
sbyte 8位有符号整数类型 -128到127 0
short 16有符号整数类型 -32,768 到 32,767 0
uint 32位无符号整数类型 0 到 4,294,967,295 0
ulong 64位无符号整数类型 0 到 18,446,744,073,709,551,615 0
ushort 16位无符号整数类型 0到65535 0

引用类型

引用类型不包含存储在变量中的实际数据,其指向的是一个内存位置。
内置的引用类型有:object、dynamic、string

  • 对象(object)类型
    是C#中所有数据类型的终极基类,可以被分配任何其它类型的值
    当一个值类型转换为对象类时,被称为 装箱
    当一个对象类型转换为值类型时,被称为 拆箱

  • 动态(dynamic)类型
    任何类型的值都可以存储在动态数据类型变量中,且这些变量的类型检查是在运行时发生的

dynamic <variable_name> = value;
dynamic d = 20;
  • 字符串(string)类型
    允许给连梁分配任何字符串值。字符串类型的值可以通过两种形式进行分配:@“” 和 “”
    在""前加@:
    • 被称为逐字字符串,会将转义字符当做普通字符对待
    • @字符串中可以任意换行,换行符及缩进空格都计算在字符串长度之内
string str = @"j\tlfjldgf
	dfdfaf=""gkjrflsdjl""
"

指针类型

c#中的指针和C/C++d 指针相同

char* p;

类型转换

  • 隐式类型转换
    隐式是指将一个较小范围的数据类型转换为较大范围的数据类型时,编译器会自动完成类型转换,且这些转换C#默认以安全方式进行转换,不会导致时间丢失。
byte b = 10;
int i = b; //系统会自动将byte转换为int
  • 显示类型转换
    即强制类型转换,在将一个较大范围的数据类型转为较小范围的数据类型,或者将一个对象类型转换为另一个对象类型,需要使用强制类型转换符号进行显式转换,强制转换会造成数据丢失。
int i = 10;
byte b = (byte)i;//显式转换,需要使用强制类型转换符号

int int_v = 123;
string string_v = int_v.ToString();//将int转换为字符串
  • C#类型转换方法
方法 描述
ToBoolean 转换为布尔类型
ToByte 转换为byte类型
ToChar 转为字符类型
ToDateTime 把字符串、整数类型转换为日期-时间结构
ToDecimal 将浮点或整数类型转换为十进制类型
ToDouble 转为double类型
ToInt16\32\64 转为16\32\64位的整数类型
ToSingle 转为小浮点数类型
ToSbyte 转为有符号字节类型
ToString 转为字符串
ToType 转为指定类型
ToUint16\32\64 转为无符号16\32\64位的整数类型

变量、常量及变量的作用域

变量

变量是用于存储和表示数据的标识符

类型 举例
整数类型 sbyte、byte、short、ushort、int、uint、long、ulong和char
浮点类型 float、double
十进制类型 decimal
布尔类型 true、false
空字符串 string
空类型 可为空值的数据类型
动态类型 dynamic
  • 变量定义
//定义变量
int i,j,k;
double d;
  • 变量初始化
int d = 3,f = 5;
byte z = 22;
double pi = 3.1415926;
char x = 'x';
  • 接受来自用户的值
// system 命名空间中console类提供了一个函数ReadLine()  但Console.ReadLine只接受字符串格式的数据
int num;
num = Console.ToInt32(Console.ReadLine());
  • Lvalues和Rvalues

    • lvalue:lvalue表达式可以在赋值语句的左边或右边 变量
    • rvalue:rvalue表达式只能从现在赋值语句的右边 值

变量作用域

在C#中,变量的作用域定义了变量的可见性和生命周期,通常用{}来定义

  • 局部变量
//在方法、循环、条件语句等代码块中声明的变量是局部变量,它们只在声明它们的代码块中可见
void MyMethod()
{
	int localVar = 10;//局部变量
	
}
//localVar 此处不可见
  • 块级作用域
//在C# 7及以上版本中引入
{
	int blockVar = 20;//块级作用域
}
//blockVar不可见
  • 方法参数作用域
// 方法的参数也有其自己的作用域,它们在整个方法中都是可见的
void MyMethod(int parameter)
{
	//parameter 在整个方法中可见
}
  • 全局变量
//在类的成员级别定义的变量是成员变量,在整个类中可见 如果在命名空间中定义,那就在整个命名空间中可见
class MyClass
{
	int memberVar = 30;//成员变量 在整个类中可见
}
  • 静态变量作用域
//静态变量是在类上定义的 但其作用域也受限于其定义的类
class MyClass
{
	static int staticVar = 40;//静态变量
}
  • 循环变量作用域
//在循环中声明的变量
for (int i=0;i<5;i++)
{
	//i仅在循环体内可见
}

常量

常量是固定值,程序执行期间不会改变,且可以是任何类型。

212 215u 0xFeeL 078 //都是合法常量 U L 分别表示unsigned long ul 表示 无符号long 0表示八进制 0x16进制

3.14159 514159E-5L//前是float常量 后是科学计数法()
  • 字符常量中的转义字符
    |转义序列| 表示字符 |
    |–|–|
    |\| \ |
    | ’ | ’ |
    |“|”|
    |?|?|
    |\a|Alert或bell|
    |\b|退格键|
    |\f|换页符|
    |\n|换行符|
    |\r|回车|
    |\t|水平制表符 tab|
    |\v| 垂直制表符 tab|
    |\ooo|一到三位的八进制|
    |\xhh…|一个或多个数组的十六进制数|
  • 定义常量
//使用const
const <data_type> <constant_name> = value;
using System;
public class ConstTest
{
	class SampleClass
	{
		public int x;
		public int y;
		public const int c1 = 5;
		public const int c2 = c1+4;
		public SampleClass(int p1,int p2)
		{
			x = p1;
			y = p2;
		}
	}
	static void Main()
	{
		SampleClass mC = new SampleClass(11,22)
		Console.WriteLine("x = {0} y = {1}",mC.x,mC.y)
		Console.WriteLine("c1 = {0} c2 = {1}",SampleClass.c1,SampleClass.c2)
	}
}

运算符

  • 算术运算符
    + - * / 加减乘除
    % 取模运算符 求余
    ++ 自增运算符
    -- 自减运算符

  • 关系运算符
    == 等于 != 不等于 > 大于 < 小于 >=大于等于 <=小于等于

  • 逻辑运算符
    && 且 || 或 !不是 非

  • 位运算符
    & 与 | 或 ^异或

  • 赋值运算符

运算符 描述 实例
= 简单赋值运算符 C=A+B 把A+B的值赋给C
(+-*/ % & | ^)= (+-*/ % & | ^)且 赋值运算符 C+=A 相当于C=C+A 其余类推
<<= 左移且赋值 C<<=2 等同于 C=C<<2
>>= 右移且赋值 C>>=2 等同于C=C>>2
  • 其他运算符
    | 运算符 | 描述 |实例|
    |–|–|–|
    | sizeof() | 返回数据类型的大小 |sizeof(int)返回4|
    | typeof() | 返回class类型 |typeof(StreamReader)|
    | & | 返回变量的地址 |&a;将得到变量的实际地址|
    | * | 变量的指针 |*a;将指向一个变量|
    | ?: | 条件表达式 三目运算符 |如果条件为真? 则为X 否为Y (x=y)?x:y|
    | is | 判断对象是否为某一类型 | if(Ford is Car)|
    |as|强制转换,即使失败也不会抛出异常|Object obj = new StringReader(“Hello”);StringReader r=obj as StringReader;|

参考

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到