C#基本语法

2021/4/25 1:25:17

本文主要是介绍C#基本语法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

  • 输出
  • 为了避免闪退现象
  • system命名空间
  • 控制台输出
    • console.write(),console.writeline()
    • 使用索引输出,索引号必须从0开始不间断顺延
    • 只能输出object数组,其他数组不可以
    • 输出数组元素的指定位置
  • 控制台输入
    • ReadKey()方法
    • Read()方法
    • ReadLine()方法
  • .NET Framework
  • 基本语法
    • 解决方案文件和项目文件以及类文件之间的关系
  • 常量与变量
    • 引用类型与值类型
    • 常量与变量
    • 值类型与引用类型的区别
  • 数据类型
    • object类型
    • dynamic类型
    • 装箱和拆箱
  • 数据类型之间的转换
    • 使用convert进行任意类的转换
    • 日期和时间
    • 全局唯一标识符
    • 运算符

输出

Console.WriteLine("Hello C#");

为了避免闪退现象

第一种:

Console.ReadLine();

用户输入回车键关闭
第二种:

Console.ReadKey();

用户输入一个字符后关闭

system命名空间

using system类似于using namespace
c#中输入输出函数都包含在system的类,所以使用输入输出函数必须使用system 类。(对比c++中的iostream)

控制台输出

console.write(),console.writeline()

console.write(),console.writeline()都是system.console这个类的方法,都是用于输出。
两者区别在于:
console.writeline()有无参数都可,而且语句执行结束,光标移动到目前输出字符串的下一行。
console.write()至少有一个参数。语句结束光标在输出字符串的最后一个字符。

使用索引输出,索引号必须从0开始不间断顺延

string name = "李明";
            int age = 18;
            char sex = '男';
            Console.WriteLine("姓名:{0}\t性别:{1}\t年龄:{2}\t", name, sex, age);

只能输出object数组,其他数组不可以

Console.WriteLine("输出数组");
            object[] i = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
            Console.WriteLine("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9}", i);
            Console.ReadLine();

输出数组元素的指定位置

Console.WriteLine("数组元素");
            char[] c = { 'A', 'B', 'C', 'D', 'E', 'F', 'G' };
            Console.WriteLine(c, 2, 4);
            Console.ReadLine();//从下标为2,一直输出到4,每次输出一个

控制台输入

ReadKey()方法

读取单个字符。

Read()方法

读取单个字符

ReadLine()方法

读取一串字符串

.NET Framework

.NET Framework是一套语言独立的应用程序开发框架,主要的特点在于简化应用程序的开发复杂性,提供一个一直的开发模型,可以选择任何支持.NET的编程语言进行应用程序开发。
.NET Framework主要有两个部分组成:CLR 公共语言运行库和.NET Framework类库
C#是面向.NET Framework的语言,除了C# ,F#也是一样的。.NET Framework 看做航空母舰,C#就是航空母舰上的飞机。

基本语法

using MK = System.Console;//命名空间的别名
MK.WriteLine("命名空间的别名");

解决方案文件和项目文件以及类文件之间的关系

vs创建一个项目后生成一个文件。文件包括后缀名为.sln的解决方案文件和
同名文件夹,解决方案文件又包括后缀名为.csproj的项目文件和后缀名为.cs的类文件,可以通过记事本打开的。
对于简单的变量,一般采用驼峰命名法。

常量与变量

字符常量的输出类似于:

Console.WriteLine('a');

注意对转义字符的输出。
对于字符串的输出:
第一种:加双引号,
第二种:在字符串前面加@表示取消字符串中的转义。也可以表示字符串可以分为多行书写。
例如:

Console.WriteLine(@"d:\root\subdir");

相当于

Console.WriteLine("C:\\root\\subdir");

如果要在@字符串中包含双引号,双倍添加即可

Console.WriteLine(@"""captain!""");

多行书写:

string str3 = @"<script type=""text/javascript"">
            <!--
            -->
            </script>";
            Console.WriteLine(str1);
            Console.WriteLine(str2);
            Console.WriteLine(str3);

定义一个常量如:

const double PI = 3.14159;

完整代码:

 const double PI = 3.14159;
            double r;
            Console.WriteLine("请输入半径:");
            r = Convert.ToDouble(Console.ReadLine());//将输入的字符串转换为数值
            double s = PI * r * r;
            Console.WriteLine("半径为:{0}, 面积为: {1}\n", r, s);
			int num;
            num = Convert.ToInt32(Console.ReadLine());//将用户输入的数据转化为int数据类型

引用类型与值类型

//值类型
            int a = 0;
            int b = a;
            b = 100;
            Console.WriteLine("a={0} b={1} ", a, b);
            //引用类型
            A n1 = new A();
            A n2 = n1;
            n2.num = 200;
            Console.WriteLine("n1={0} n2={1}", n1.num, n2.num);

结果如下:
a=0 b=100
n1=200 n2=200
所以对于引用类型两种变量可引用同一对象,对一个变量的操作会影响另外一个变量。
值类型就是一个包含实际数据的量。当定义一个值类型的变量时,c#会根据它所声明的类型,以栈方式分配一个大小相适应的存储区域给这个变量。
引用类型的变量不存储它们的实际数据,而是存储实际数据的引用。引用类型创建分两步走,首先在栈上创建一个引用变量,在堆上创建对象本身,然后将内存的句柄(首地址)赋给引用变量。

常量与变量

两者区别:变量就是在运行过程中发生变化的量,常量是不发生变化的量。
常量的优点:第一,易于阅读,增强可读性
第二,常量是静态的,不用声明为static类型

值类型与引用类型的区别

第一,值类型的数据存储在内存的栈中。引用类型中,堆中只是存储实际数据,栈中存储的是指向堆中数据的地址。
第二,值存取速度快,引用类型存取速度慢。
第三,值类型是一个实际数据,引用类型其实是一个地址。
第四,值类型集成自System.ValueType ,引用类型集成自system.object
第五,栈的内存分配是自动释放,而堆在.NET中会有垃圾回收来释放。
使用值类型和引用类型时,对内存有哪些影响?
在设计一个应用程序时,如果都是引用类型,那么应用程序的性能将显著下降,因为这会加大托管堆的压力,增加托管堆的压力。虽然值类型是一个轻量级,但是如果大量使用值类型,也会有损于应用程序的性能。

由于值类型实例的值是自己本身,所以将一个值类型的变量赋值另一个值类型的变量,会执行一次逐字段的复制。
引用类型实例的值是一个引用,将引用类型的变量赋值给另一个引用类型的变量时,只需要复制内存地址。
所以对对象进行赋值时要避免使用值类型

数据类型

值类型是抽象类型system.valuetype的直接派生类,system。valuetype 又是直接从system.objectp派生的

object类型

引用类型的关键字为object,可以将所有类型的值赋给object类型。但是在分配值之前,需要先进行类型转换。
object类型其实就是一个万能类型。

 object name, age, sex, height;
            name = "周红";
            age = 18;
            sex = '女';
            height = 180;
            Console.WriteLine("姓名:{0}\t年龄: {1}\t身高: {2}\t性别: {3}\t",name,age,sex,height);

dynamic类型

装箱和拆箱

装箱拆箱是值类型和引用类型之间相互转换时要执行的操作。
装箱是值类型向引用类型转换时发生。

object obj=1;

常量是值类型,值类型是要放到栈上的。而object是引用类型,需要放在堆上。所以执行装箱操作不可避免地要在堆上申请内存空间。并且将堆栈上的值类型数据赋值到申请的堆内存空间上,这肯定要消耗内存和CPU。
拆箱是引用类型向值类型转换时发生。

object obj=5;//先执行装箱操作
int value=(int)obj;

拆箱操作与装箱操作与之相反。

数据类型之间的转换

使用convert进行任意类的转换

针对于两个变量不可兼容 比如string和int类型
1.数值型转换为字符型

int num = 10;
            string str = num.ToString();
            Console.WriteLine(str);

2.字符串转换为数值型
int.parse()
double.parse()
float.parse()
注意parse的参数只能是字符串,并且只有表示成数字的字符串才能进行转换。

日期和时间

通过DateTime这个类来获取当前的时间

 string dt = DateTime.Now.ToString();
            Console.WriteLine("测试当前时间:{0}", dt);
            Console.WriteLine("{0}", DateTime.Now.ToString("d"));//短日期模式
            Console.WriteLine("{0}", DateTime.Now.ToString("D"));//长日期模式
            Console.WriteLine("{0}", DateTime.Now.ToString("f"));//长日期和短时间模式
            Console.WriteLine("{0}", DateTime.Now.ToString("yyyy"));//四位年份
            Console.WriteLine("{0}", DateTime.Now.ToString("MMMM"));//两位月份
            Console.WriteLine("{0}", DateTime.Now.ToString("dd")); //日数
            Console.ReadLine();

上面只是举几个例子,不是很全面。

全局唯一标识符

GUID主要的目的是产生完全唯一的数字,唯一缺陷在于生成的结果串会比较大。
通过使用NewGuid方法,生成GUID

运算符

^ 位逻辑异或运算:相同为0,相异为1
为逻辑非运算
sizeof():用于获取值类型的字节大小,仅仅适用于值类型,不适合于引用类型。
typeof():将类型的信息当做字符串返回。
int size = sizeof(int);
            Console.WriteLine(size);
            Console.WriteLine("char类型的对象 {0}", typeof(char));

输出结果为:4
char类型的对象 System.Char
is as运算符
as运算符主要用于在兼容的引用类型之间执行转换。

Console.ReadLine();//用于接收用户的输入,输入类型默认为string


这篇关于C#基本语法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程