基础知识
namespace _1.基础知识
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
Console.Write("Hello, World!");
}
}
}
namespace 是命名空间,可以用using指令来引入命名空间;
class是类的关键词;
static代表静态类 静态类调用 字段 方法... 必须使用类名调用
void 代表没有返回值;此时将void改为int代表有返回值且返回值为整数类型;
Main代表主函数也就是书写逻辑的地方;
Console.WriteLine("Hello, World!"); Console.Write("Hello, World!");这两句都是输出(打印)的意思但是,WriteLine表示换行输出,Write代表不换行输出。结果演示:
1.数据的类型
在c#中数据的类型分为三种:值类型(Value types)、引用类型(Reference types)、指针类型(Pointer types)。
首先是值类型:值类型变量可以直接分配给一个值。它们是从类 System.ValueType 中派生的。
1.整数类型
先介绍整数类型:整数类型的最为多样有:byte、int、long、sbyte、short、uint、ulong、ushort这些整数类型不同的原因是他们的取值范围不同。
类型 | 描述 | 取值范围 | 默认值 |
---|---|---|---|
long | 64位有符号整数类型 | -9,223,372,036,854,775,808 至 9,223,372,036,854,775,807 | 0L |
int | 32位有符号整数类型 | -2,147,483,648 至 2,147,483,647 | 0 |
short | 16位有符号整数类型 | -32,768 至 32,767 | 0 |
sbyte | 8位有符号整数类型 | -128 至 127 | 0 |
ulong | 64位无符号整数类型 | 0 至 18,446,744,073,709,551,615 | 0 |
uint | 32无符号整数类型 | 0 至 4,294,967,295 | 0 |
ushort | 16位无符号整数类型 | 0 至65,535 | 0 |
byte | 8 位无符号整数 | 0至255 | 0 |
这些整数值类型如何用例:定义一个年龄
可以在定义时直接赋值,也可以先定义再赋值;
int age=30;
int age;
age1=35;
2.布尔类型
布尔类型说的是布尔值,布尔值只有ture和false这两种,示例:
bool a=ture;
//bool a=1;//这样会出现报错,原因时布尔值没有1,有且仅有ture和false这两种
3.浮点类型
浮点类型,用我自己的感觉就是小数,浮点类型分为,高精度的decimal、中精度的double以及低精度的float。其中中精度和低精度类型再计算式=时可能会发生数据溢出,暂时没有什么好的解决方法,当发生数据溢出的时候,可尝试将中精度或低精度的变量为高精度的来解决数据的溢出。
double a=0.125;
float b=0.125f;
decimal c=10.25677M;
使用F和M的原因是因为在C#中小数类型默认为double类型,因此在声明其他类型的小数需要将后缀带上表示这是哪种类型的小数
4.字符类型
字符类型的有char
char a='A';
ConSolve.WriteLine(a)
此时输出的数据就是A在ASCII码表中对应的值。
引用数据类型: Object对象 动态类型 字符串类型。
string name="张三";//这是一个字符串类型
此部分数据来自:C# 数据类型 | 菜鸟教程
2.变量和常量
1.变量
在上述例子中使用了变量,变量的创建先要声明变量的类型。再写变量的名字,其中变量的命名规则为:
1.不能使用数字开头;
2.不能使用关键词作为变量的名字;
3.可以不是并不推荐使用中文作为变量的名字;
示例:
int age=18;//声明一个整数类型的age变量
//int class;//这样是不允许的因为class是关键词
2.常量
变量和常量的创建方式和命名方式基本相同。变量和常量的不同点在变量可以先声明再赋值,但是常量的声明和赋值必须在同一行完成,而且变量的值可以更改,常量的值一旦定义就不能过更改,示例:
namespace _1
{
internal class Program
{
static void Main(string[] args)
{
//变量
int a = 15;
a = 16;
Console.WriteLine(a);//此时a的值就变成了16
//常量
const int a1 = 17;
//a1 = 18;//a的值无法更改,此时将注释删除就会报错
Console.WriteLine(a1);
}
}
}
结果:
3.变量之间值的交换
示例:a=12、b=13交换a和b的值
namespace _1
{
internal class Program
{
static void Main(string[] args)
{
int a = 12;
int b = 13;
int c =a;
a=b;
b=c;
Console.WriteLine(a);
Console.WriteLine(b);
}
}
}
结果:
3.类型转换
为什么需要类型转换因为不同类型数据之间是不能相互赋值的,比如在用户输入的ConSolve.ReadLine()这里用户输入的是字符串,字符串是无法直接赋值给其他类型因此需要类型的转换。
1.隐式转换也叫自动转换
示例:
namespace _1
{
internal class Program
{
static void Main(string[] args)
{
int a = 15;
a = 16;
Console.WriteLine(a);
char c = 'C';
a = c;
Console.WriteLine(a);
}
}
}
结果:
在这里发生了一个隐式转换才可以直接将char类型转换为int类型,那么隐式转换发生的条件是什么?在数据类类型取值范围小的转取值范围大的时候可以发生自动转换,当取值范围大的转换为取值范围小的就不会发生隐式转换。此时需要使用强制转换
2.强制转换
强制类型转换的方法
1.使用(转换类型)
() (需要转换的数据类型)示例:将int类型转换为char类型。
namespace _1
{
internal class Program
{
static void Main(string[] args)
{
int a = 15;
a = 16;
Console.WriteLine(a);
char c = 'C';
a = c;
Console.WriteLine(a);
int b = 98;
c = (char)b;
Console.WriteLine(c);
}
}
}
结果:
最后一行的b就是变量b在ASCII码表中对应的值。
2.Parse方法
Parse 方法用于将字符串转换为对应的数值类型,注意在使用Parse方法时需要注意被转换的类型只能是字符串类型,示例:
namespace _1
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入你的你的年龄");
string a1 =Console.ReadLine();
int age;
age = int.Parse(a1);
Console.WriteLine(age);
}
}
}
结果:
3.Convert方法
在调用Convert方法时必须使用类名调用。
例将小数2.5665转换为整数:
namespace _1
{
internal class Program
{
static void Main(string[] args)
{
float a = 2.5665f;
int b1 = (int)a;
int b2 = Convert.ToInt32(a);
Console.WriteLine(b1);
Console.WriteLine(b2);
}
}
}
结果:
注意:在使用(转换类型)强制转换时会将小数部分舍弃,而在使用Convert方法的强制转换时会将小数部分四舍五入
其他类型转换类名可在C# 类型转换 | 菜鸟教程寻找。