C#基础语法
从今天开始就正常更新博文,之前因为开学要准备各种各样的材料、上课的笔记要整理等等都没更新。后面我会给一直支持关注我的小伙们补上的。我准备更新以下几个方面的内容,我会放到自己的专栏里面,方便大家查阅,有兴趣的小伙伴可以多多支持,有不正确的地方还请指出。
1.Java(主要是为了蓝桥杯,上学期学过但不具体,主要是复习加强化。大致内容也是会结合比赛实战为导向)
2.C#(最开始我也是更新这个的,因此很多小伙伴留言要好好学习C#,所以我会继续分享。)
3.数据结构和算法(其重要性不言而喻,无论是工作面试还是考研都是重点)
4.计算机硬件知识(主要是是计算机组成原理,也是很重要的。对于程序开发人员来说,也是必备的知识,它是决定一个程序员的上限,毕竟总不能一直当低端的码农吧。)
5.其它(其实就是水博客(战术后仰),看心情不定时更新。例如我最近更新的《震惊!失踪博主竟参加这种比赛》(标题党实锤了))。
好了,废话不多说了,开始正正经经的开始更新C#。之前更新的都是实际操作例子,很多小伙伴想自己随意编写一个窗体应用,那么语法知识肯定是不能少的。
************************************************************************
推荐参考书目:“十二五”普通高等教育本科国家级规划教材 C#程序设计案例教程(第二版)清华大学出版社。
当然,不想看书的小伙伴可以看我的总结。
对于基础语法部分,学过一门编程语言的都知道无非是一些数据类型和格式上、运算上的要求。因为是面向对象的语言,基础语法大致相当,所以我会重点阐述独特的地方。
主要内容
1.C#基本要求与变量存储数据
2.C#数据类型的使用与定义
3.数据类型转换
基本要求
1.严格区分大小写。
2.“;”作为代码行的结束
3.以{}标记代码块
4.C#没有全局变量和全局方法,所有元素必须包含在类中
5.C#源代码文件名后缀为.cs
6.注释,C#的单行注释与多行注释与C语言相同,但它有一个XML注释:/// ,这样的注释可以使得代码可读性强,并且使得成员类型具有自动提示功能。
数据类型
C#中的数据类型可以分为值类型和引用类型,均由System.Object类派生。
值类型
值类型包括int、float等一系列几乎其它语言都有的类型,我们具体讲讲不同的地方。
1.小数类型,它不是浮点数类型的一部分,它是C#单独提供的。关键字为decimal。它是所有数值中小数精度最高的,主要用于精度要求较高的金融和货币运算。
2.枚举类型
枚举类型里面的元素类型相同,是表达固定意义的常量。所谓枚举就是把元素一个一个列出来。下面我们以一个实际例子来了解枚举的定义使用方法。
enum Program
{
A,B=6,C,D
};
Program ch;
ch=Program.C;
Console。WriteLine(“C”);
其中可以看出,枚举的定义关键字是enum,并且默认里面的元素为int型。该程序结果为7。在枚举类型里面,缺省时第一个枚举元素为0,后面的依次递增1。也就是说A就是0,后面的加1。
引用类型
主要包括类(class)、接口(interface)、委托(delegate)、字符串类型(string)、数组类型(arry)。具体的用法后面再介绍。
接下来主要以两个例子谈值类型和引用类型的区别。
1.值类型
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 实例3_1
{
class Program
{
static void Main(string[] args)
{
int a = 10;
int b = 20;
Console.WriteLine("before change:a={0},b={1}", a, b);
Change(a, b);
Console.WriteLine("after change:a={0},b={1}", a, b);
}
static void Change(int x,int y)
{
x = x + 10;
y = y + 10;
}
}
}
运行结果为:
2.引用类型(以数组为例)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace example3_2
{
class Program
{
static void Main(string[] args)
{
int[] a = new int[1];
a[0] = 10;
Console.WriteLine("before change:a[0]={0}", a[0]);
Change(a);
Console.WriteLine("after cahnge:a[0]={0}", a[0]);
}
static void Change(int[]x)
{
x[0] += 10;
}
}
}
运行结果:
如果不了解两者的区别,在不运行的情况下思考得出来的结果会是一样的,为什么又不一样呢?
引用类型的数据传递是传递的地址,值类型是送出具体的值。前者只是将数据复制一份给形参,无法传回修改值。后者是将地址相互传递,值发生了改变,对应地址的值会更新。下表是具体的不同点的比较。
常量与变量
常量
类似于C语言中的define定义的标识符,无论在程序的哪个地方,都是一个常量。在C#中用const,定义的类型可以是任意的。并且要求在声明时必须赋值。(好的标识符定义最好做到见名知义)
格式:<访问修饰符>const 常量数据类型 标识符(常量名)=常量值; 例下:
public int a =10;
变量
变量的定义与Java差不多,主要讲类型。
C#中的变量类型一共七种,分别是 静态变量、实例变量、数组元素、数值参数、引用参数、输出参数、局部变量
其中,谈一下输出参数和引用参数的修饰及特点,其他的在后面会介绍。
1.out用于修饰输出参数,表示引用传递,不是双向传递。
2.ref用来修饰引用参数,表示按引用传递,传递是是双向的。
接下来举一个例子:
public static int x;
int y;
void fun(int[]arr,int a,ref int b,out int c)
{
int i=1;
c=a+b;
}
能分清里面的参数类型就说明掌握得差不多了,基本能分辨各种参数。答案下期揭晓。
数据类型转换
C#中有隐式转换和显式转换,隐式转换相当于C语言中的自动类型转换,就是低精度往高精度转换;显式转换就相当于C语言中的强制类型转换。格式差不多。
但是有几点要注意:
1.不存在decimal类型和float、double之间的隐式转换。
2.不存在char和bool之间的类型转换
3.不存在到char的隐式转换。
4.显式转换可能会导致精度降低或者出现异常。
// 显式转换举例
double a= 0.0033;
double b=1.6326;
int c = (int)(a/b);
拆箱与装箱
1.装箱:数值类型转换为引用类型,拆箱:引用类型转换为数值类型。
//装箱举例
int a=55;
object b=a;
Console.WriteLine(“转换后的值:”,b);
//拆箱举例
int a=23;
object b =a;
int(c)=(int)b;
Console.WriteLine(“转换后的值:”,c);
这就是装箱和拆箱的格式。
.NET类库支持的方法转换
1.ToString()方法
可以利用该方法将源数据转换为string类型,格式如下
int a=23;
string b=a.ToString();
2.Parse()方法
该方法可以将字符串类型转换为其它类型
int b =Int32.Prase(“23”);//32代表将字符串转换为32位有符号整数
3.Convert类
该类包含很多静态方法,支持多种类型转换,但是他不提供到float的转换。
int b =Convert.ToInt32(“23”);
参数格式和值超出目标类型的界限会有异常。
最后举一个实例
情景:设计一个方法和函数,验证登录信息的正确性。(例如,在类的内部设置应户名:abbbc 密码:123456,然后验证是否可以登录。)
可以自己先写一下再来对照。
代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace example3_6
{
class Login
{
const string name = "abbbc";
const string pass = "123456";
public bool CheckUser(String username,String password)
{
if(name.Equals(username)&&pass.Equals(password))
{
return true;
}
else
{
return false;
}
}
static void Main(string[] args)
{
String username = args[0];
String password = args[1];
Login login = new Login();
bool flag = login.CheckUser(username, password);
Console.WriteLine("该用户登录信息为:"+flag);
Console.ReadKey();
}
}
}
注意:1.在判断两个字符串类型是否相等时,用Equals方法,==比较的是对象存储的地址值,一直会是false。
2.在运行前要指定两个参数,具体方法:点击“项目”,找到该程序的属性,然后输入如下的参数(严格按照格式,两个参数中间要隔开):
运行结果如下:
这就是今天的所有内容了,有疑问可以在评论区留言或者私聊。