一起来学C#之语法(1)

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.0033double b=1.6326int c =int)(a/b);

拆箱与装箱

1.装箱:数值类型转换为引用类型,拆箱:引用类型转换为数值类型。

//装箱举例
int a=55object b=a;
Console.WriteLine(“转换后的值:”,b);
//拆箱举例
int a=23object b =a;
int(c)=int)b;
Console.WriteLine(“转换后的值:”,c);

这就是装箱和拆箱的格式。

.NET类库支持的方法转换

1.ToString()方法
可以利用该方法将源数据转换为string类型,格式如下

int a=23string 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.在运行前要指定两个参数,具体方法:点击“项目”,找到该程序的属性,然后输入如下的参数(严格按照格式,两个参数中间要隔开):
在这里插入图片描述
运行结果如下:
在这里插入图片描述
这就是今天的所有内容了,有疑问可以在评论区留言或者私聊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章