常量
/*
常量是固定的量,在运行过程中不可以改变的量
const 来修饰不能改变的量
*/
// public private protected internal 是访问修饰符
using System.Security.Cryptography.X509Certificates;
namespace ConsoleApp1
{
internal class Program
{
public const int a = 15; //定义一个整型常量
public const char b= 'A'; //定义一个字符常量
public const string c = "hello world"; //定义一个字符串常量
static void Main(string[] args)
{
Console.WriteLine("Hello world \a");//\a表示响铃
Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine(c);
Console.WriteLine(@"你好啊\a"); //@带的字符串会取消字符串中的转义
}
}
}
变量
/*
变量声明是指程序运行前,编译器告诉程序变量的名称、类型、长度等
变量初始化提高了c#安全性,调用未初始化的变量会当成错误
*/
namespace ConsoleApp2
{
internal class Program
{
static void Main(string[] args)
{
int a = 10;
int b = 20;
int c = a + b; //定义三个变量
Console.WriteLine("a:{0},b:{1},c:{2}",a,b,c);
int num=Convert.ToInt32(Console.ReadLine());//从键盘读取的数字是字符串类型的,使用强制类型转换
Console.WriteLine("num:{0}",num);
}
}
}
变量类型
值类型
/*
值类型:可以直接存储数据
引用类型:存储的是数据的引用,这里跟c语言中的指针类型不一样,因为指针类型和引用类型存储的区域不一样,引用类型存储在堆上
值类型:派生system.ValueType,值类型不能包含Null
*/
namespace ConsoleApp3
{
internal class Program
{
static void Main(string[] args)
{
double a = 3.1415926;
Console.WriteLine(a);
float b = Convert.ToInt16(a); //double强制转换为float类型
Console.WriteLine(b);
bool c=false;
Console.WriteLine(c);
int d=Convert.ToInt32(c);//将bool类型直接转换为int类型
Console.WriteLine(d);
Console.WriteLine("请输入一个数字,我会判断是偶数还是奇数");
int e =Convert.ToInt32(Console.ReadLine()); //注意这里使用ReadLine,Read输入的是一个acsii值
if (e%2==0)
{
Console.WriteLine("{0}是一个偶数", e);
}
else
{
Console.WriteLine("{0}是一个奇数", e);
}
}
}
}
引用类型
/*
引用类型:不直接存储变量的值,而是存储数据的地址
必须使用new 来创建引用类型的变量
引用类型是由垃圾回收机制来管理的
引用类型在未被赋值前都是null
多个引用类型都可以引用同一对象,对一个变量执行的操作会影响另一个变量
*/
namespace ConsoleApp4
{
internal class Program
{
class A
{
public int num = 0; //声明一个共有类型的变量
}
static void Main(string[] args)
{
int a = 0;
int b = a;
b = 100;
Console.WriteLine("a={0},b={1}",a,b); //a,b都是值类型,b改变并没有改变a的值
A n1=new A(); //使用new创建一个引用对象
A n2=n1; //n2都指向同一个对象
n2.num = 100;
Console.WriteLine("n1.num={0},n2.num={1}", n1.num, n2.num);
}
}
}
/*
C#里面把数据类型分为两大类,分别为值类型和引用类型。
值类型包括基本数据类型(int、char、double等)、结构和枚举。
引用类型包括接口、数组、类等
值类型会以栈的方式分配一块相适应的存储区域,对变量的读取直接就在该内存区域直接进行
引用类型不存储数据,而是存储数据的引用。引用类型分两步创建,首先在栈上创建引用变量,然后在堆上创建对象本身,然后再把堆上的首地址赋给引用变量
*/
枚举类型
/*
枚举类型:enum关键字声明
*/
namespace ConsoleApp1
{
enum days { sun,mon,tue,wed,thu,fri,sat}
internal class Program
{
static void Main(string[] args)
{
int start =(int)days.sun;
Console.WriteLine("mon{0}",start);
for(int i=0;i<5;i++)
{
Console.WriteLine("hello world");//打印五次hello world
}
}
}
}
数据类型
namespace ConsoleApp2
{
internal class Program
{
static void Main(string[] args)
{
//sizeof(type)可以产生以字节为单位的存储对象或类型的存储空间大小
Console.WriteLine("size of byte :{0}", sizeof(byte));
Console.WriteLine("size of int: {0}", sizeof(int));
//引用类型是system.object,所有类型都是继承system.object.所以任何类型的值都可以赋值给object类型的变量
object age;
age = 10; //装箱操作,10是值类型,在栈上,age是object,在堆上
//Console.WriteLine("age:{}", age); //这里不能直接输出object
int age1 = (int)age;//拆箱
string dt = DateTime.Now.ToString();
Console.WriteLine("当前时间:{0}",dt);
Console.WriteLine("当前时间{0}", DateTime.Now.ToString("d"));
Console.WriteLine("全局唯一标识符:{0}",Guid.NewGuid().ToString());
//打印类型
string a = typeof(string).ToString();
Console.WriteLine("{0}", a);
Console.WriteLine("{0}", typeof(char)); //Console.write会自动转换类型为字符串
}
}
}