using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("ok");
String str = "String";
char[] chs = str.ToCharArray();
for(int i = 0; i < chs.Length; i++)
{
Console.WriteLine(chs[i]);
}
//获取变量类型大小
Console.WriteLine("size of bool: {0}", sizeof(bool));
//值类型
/*bool v0 = true;
byte v1 = 0;//0-255 8
char v2 = '\0';//U+0000 ~ U+ffff 16
decimal v3 = 0.0M;//-7.9x10^28~7.9x10^28 128位精度十进制值,28-29有效位数
double v4 = 0.0D;//(+/-)5.0x10^-324~(+/-)1.7x10^308 64位双精度浮点型
float v5 = 0.0F;//-3.4x10^38~3.4x10^38 32位单精度浮点型
int v6 = 0;//-2147483648~2147483647 32位有符号整数类型
long v7 = 0L;//-9,233,372,036,854,775,808 ~ 9,223,372,036,854,775,807 64位有符号整数类型
sbyte v8 = 0;//-128~127 8位有符号整数类型
short v9 = 0;//-32768~32767 16位有符号整数类型
uint v10 = 0;//0~4294,967,295 32位无符号整数类型
ulong v11 = 0;//0~18,446,744,073,709,551,615 64位无符号整数类型
ushort v12 = 0;//0~65,535 16位无符号整数类型*/
//引用类型
//1.对象类型object(所有数据类型的终极基类)
//装箱(值类型->对象类型)
int v13 = 123;
object v14;
v14 = v13;
Console.WriteLine("v14: {0}", v14);
//拆箱(对象类型->值类型)
int v15 = (int) v14;//强制类型转换
Console.WriteLine("v15: {0}", v15);
//2.动态类型dynamic
//任何类型的值在动态数据类型变量中,变量的类型检查是在运行时发生的。
//dynamic <variable_name> = value;
dynamic d = 20;
Console.WriteLine("dynamic d value is: {0}", d);
d += 0.1999;
Console.WriteLine("dynamic d value is: {0}", d);
d -= 0.1999;
Console.WriteLine("dynamic d value is: {0}", d);
d = '\0';
Console.WriteLine("dynamic d value is: {0}", d);
double d1 = 20;
Console.WriteLine("double d1 value is: {0}", d1);
//动态类型与对象类型相似,但是对象类型变量的类型检查是在编译时发生的,而动态类型变量的类型检查是在运行时发生的。
//3.字符串类型String
String str1 = "o\nk";
String str2 = @"o\nk";
Console.WriteLine("str1 is: {0}", str1);
Console.WriteLine("str2 is: {0}", str2);
//str2前使用@,将转义字符当作普通字符对待。
//4.用户自定义引用类型有:class、interface或delegate。
//指针类型
//运行unsafe代码块,需要在vs项目->生成中开启允许不安全的代码块
unsafe
{
int p1 = 99;
Console.WriteLine("p1 is: {0}", p1);
int* p2 = &p1;
Console.WriteLine("p2 is: {0}", *p2);
p1++;
Console.WriteLine("p2 is: {0}", *p2);
}
Console.ReadKey();
}
}
}