C#学习 part2 C#基础-1

本文详细介绍了C#编程语言的基础概念,包括值类型(如int、float等)、引用类型(如object、string),指针类型,以及类型转换和运算符的使用。还涵盖了变量、常量的作用域和C#中的不同类型及其特性。
摘要由CSDN通过智能技术生成

数据类型

值类型

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

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

类型描述范围默认值
bool布尔值True或FalseFalse
byte8位无符号整数0到2550
char16位Unicode字符U+0000到U+ffff‘\0’
decimal128位精确的十进制值,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×)/100280.0M
double64位双精度浮点型 ( + / − ) 5.0 × 1 0 − 324 − ( + / − ) 1.7 × 1 0 308 (+/-)5.0\times10^{-324}-(+/-)1.7\times10^{308} (+/)5.0×10324(+/)1.7×103080.0D
float32位单精度浮点型 − 3.4 × 1 0 38 − + 3.4 × 1 0 38 -3.4\times10^{38}-+3.4\times10^{38} 3.4×1038+3.4×10380.0F
int32有符号整数类型-2,147,483,648 到 2,147,483,6470
long64有符号整数类型-9,223,372,036,854,775,808 到 9,223,372,036,854,775,8070L
sbyte8位有符号整数类型-128到1270
short16有符号整数类型-32,768 到 32,7670
uint32位无符号整数类型0 到 4,294,967,2950
ulong64位无符号整数类型0 到 18,446,744,073,709,551,6150
ushort16位无符号整数类型0到655350

引用类型

引用类型不包含存储在变量中的实际数据,其指向的是一个内存位置。
内置的引用类型有: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;|

参考

  • 15
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值