C#语言入门

第一章:第一个C#程序

一、.NET与C#

1.NET是什么?

.NET是C#的运行环境

2.C#是什么?

C#是一门编程语言,高级计算机语言。

3.C#文件的后缀是什么?.cs

二、第一个C#程序的创建

1.新建程序的步骤;

​ ①启动VS工具(VS是编写C#的工具);

​ ②新建项目;

​ ③生成可执行文件;

​ ④开始运行;

2.认识C#程序

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApp1
{
    class Program
    {
       static void Main(string[] args)
        {
          Console.WriteLine("你好世界!");
          Console.ReadLine();
        }
    }
}

对于这段代码,你一定既熟悉又陌生。因为它跟Java程序有几分相似,但是又有不同的地方。

组成部分:

①namespace关键字

namespace是命名空间,它的作用类似于Java中的package(包)。

②using关键字

在Java中,如果需要导包的话应该使用关键字import,而在C#中,使用using关键字来引用其他命名空间,它的作用和Java中的import类似。

③class关键字

C#也是一种面向对象的语言,使用class关键字表示类。注意:在C#中,不要求类名必须与源文件的名称一样。

④Main方法

在C#中的Main方法有四种形式:

  static void Main(String[] args){}
  static void Main(){}
  static int Main(String[] args){return 1;}
  static int Main(){return 1;}

注意:在C#中,Main方法的Main一定要首字母大写!!!

⑤关键代码

输出:

​ Console.WriteLine(“你好世界!”); //从控制台输出内容

输入:

​ Console.ReadLine(); //从控制台输入

3.Java和C#对比:

组织代码的方式:C#使用命名空间(namespace),Java使用包(packa)。

引入命名空间或包的关键字:C#使用using,Java使用import。

程序入口:C#中的Main()有四种形式,Java的main()只有一种形式。

三、C#中的注释

C#的注释有哪些?
单行://
多行:
块注释:/**/
文档注释:///

折叠:#region
#endregion

四、C#中的变量和常量

1.C#中的数据类型

常用数据类型 Java C# 举例
整型 int int 年龄
浮点型 float float 成绩
双精度型 double double 圆周率
布尔型 boolean bool 是否是少数民族

其他引用类型:string,class,array数组,集合

2.C#中的变量

语法:数据类型 变量;

命名规则:

组成:英文字母、数字、下划线_

开头:只能以字母或下划线,不能以数字开头

不能使用的:不能是C#中的关键字

变量名应该使用驼峰命名法,类名使用帕斯卡命名法。

3.C#中的常量

语法:const 数据类型 常量名称 =值;

//例如一周有7天
public const int dayMax =7;

Java中的常量:

语法:final 数据类型 常量名称 =值;

4.何时使用常量?

用于在程序中一旦设定就不允许被修改的值,例如圆周率的值在整个程序范围内一般是不能随意修改的。

五、在C#中怎么样定义数组?

语法:

数据类型[] 数组名 = new 数据类型[长度];
数据类型[] 数组名 = { 值 };
数据类型[] 数组名 = new 数据类型[长度]{值}; //长度 = 值个数

int [] num =new int [3];
string [] name ={"张三","李四"};
int [] number =new int [5]{1,2,3,4,5};

Java定义数组和C#定义数组的区别

声明:在Java中,数据类型[] 数组名 数据类型 数组名[];

在C#中,数据类型[] 数组名

大小: 在Java中,new 数据类型[长度]; 在C#中,new 数据类型[长度];

初始化:new 数据类型[]{值}; new 数据类型[长度]{值}; //长度=值的个数

长度: 数组名.length 数组名.Length(注意大写!)

六、Console类

1.C#向控制台输出

语法:

方式一:Console.WriteLine( ); //换行

方式二:Console.Write( ); //不换行

方式三:Console.WriteLine(”格式字符串“,变量列表);

string course ="C#";
Console.WriteLine("我的课程名称{0}",course);

"我的课程名称{0}"就是格式字符串,{0}叫作占位符,从零开始

2.C#从控制台输入

语法:Console.ReadLine();

该方法返回string类型,如果需要输入整型数据怎么办?接下来要进行转换了。

int age =int.Parse(Console.ReadLine());

int.Parse()方法的作用是把字符串转为整数。

七、类和对象

1.自定义方法

语法:[访问修饰符] 返回值类型 方法名(参数列表){//方法的主体}

①.访问修饰符

private:私有的

protected:受保护的

public:公开的

②.方法的返回值类型

返回值类型就是数据类型,如果返回值类型不为空,必须使用return;如果方法不返回任何值,需要使用void关键字。

③.方法名

每个自定义的方法都要有一个名称,方法名要求见名知意。

④.参数列表

调用方法时,可以向方法中传递参数,这里的参数称为形参,形参是抽象,是不存在的。

2.理解类的对象

C#中的类和对象跟Java中的类和对象一样,具体内容请看Java中的类和对象那章。

八、VS的调试

步骤:

1.设置断点

程序调试时常用的快捷键如下:

F5:开始调试

F9:设置或取消断点

F10:单步执行

2.监视变量值

第二章:C#语法快速热身

一、选择结构

1.if结构

语法:

①简单if结构:

if(条件表达式)

{

​ //代码块

}

②if-else结构

if(条件表达式)

{

​ //代码块1

}

else

{

​ //代码块2

}

③多重if结构
if(条件表达式)
{

​ //代码块1

​ }
​ else if(条件表达式)
​ {

​ //代码块2

​ }
​ else
④嵌套if结构
​ if(条件表达式)
​ {
​ if(条件表达式)
​ {

​ //代码块1

​ }
​ else
​ {

​ //代码块2

​ }
​ }

​ else

​ {

​ //代码块3

​ }

C#中的if结构和Java中的完全相同,就简单回顾一下语法吧。

注意:在C#中一个大括号占一行!!!

2.switch结构

语法:

java:
switch(表达式) {
case 常量1:
break; //可有可无
}
C#:
switch(表达式)
{
case 常量1:
//代码块
break; //必须有
}

注意:C#语言要求每个case和default语句中都必须有break语句,如果两个case中间没有其他语句,那么前一个case可以不包含break。

例如:

 public void BankNameOutPut() 
 {
            Console.WriteLine("请输入银行简称:");
            string bank = Console.ReadLine().ToUpper();
            //将输入的银行简称转换为大写字母
            switch (bank) 
            {
                case "ICBC":
                    Console.WriteLine("中国工商银行");
                    break;
                case "CBC":
                    Console.WriteLine("中国建设银行");
                    break;
                case "ABC":
                    Console.WriteLine("中国农业银行");
                    break;
                default:
                    Console.WriteLine("输入银行简称错误");
                    break;
            }
            Console.ReadLine();
}

在Main入口调用BankNameOutPut() 方法,当输入ICBC时,则会出现“中国工商银行”,当输入CBC时,则会出现“中国建设银行”,以此类推。

二、循环结构

1.while循环

语法:

while(条件)

{

//代码块

}

2.do…while循环

do

{

​ //代码块

}while(条件表达式);

3.for循环

for(初始化; 条件判断;迭代)
{

​ //代码块

}

4.foreach循环

Java:
for(数据类型 变量名 : 数组){}
C#:
foreach(数据类型[根据数组的数据类型决定] 变量名 in 数组名)
{

​ //代码块

​ }

using System;

namespace ConsoleApp6
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] array = new int[5] { 0, 1, 2, 3, 4 };
            //循环中将array的每个元素赋值给item
            Console.WriteLine("数组array中{0}个元素的值是:", array.Length);
            foreach (int item in array) 
            {
                Console.Write(item+" ");
            }
            Console.WriteLine();
            Console.ReadLine();
        }
    }
}

三、跳转语句

1.break:将使程序跳出当前循环结构,并继续执行该循环后面的语句。

(跳出本层循环继续执行外层循环的语句)

2.continue:退出当前循环结构的本次循环,并开始执行当前循环结构的下一次循环。

(跳出本次循环,开始执行下次循环)

四、冒泡排序

1、两两相邻比较
2、不满足排序规则:交换位置

 //开始排序--使用冒泡排序,使用双重循环
            for (i = 0; i < scores.Length-1; i++)
            {
                for (j = 0; j < scores.Length-1-i; j++)
                {
                    if (scores[j]>scores[j+1])
                    {
                        //交换元素
                        temp = scores[j];
                        scores[j] = scores[j + 1];
                        scores[j + 1] = temp;
                    }
                }
            }

口诀:

▲ N个数字来排队,两两相比小靠前。

▲外层循环N-1,内层循坏N-1-i。

▲如果要降序排序,只要把(scores[j]>scores[j+1])中的大于号换成小于号就行了。

第三章:使用属性升级MyBank

一、面向对象编程,OOP

三大特性:封装,继承,多态

1、封装:

将内部的具体实现隐藏

2、继承:子承父

3、多态:多种形态

4、封装的实现:
①、抽取类,抽取类的成员:属性,方法

②、访问修饰符

public :公开

​ 只要你知道有这个对象,你就可以使用public成员

protected:受保护的

​ a、有这个对象;b、类授予你访问的权限

private:私有

​ 当前类以外的都不能访问

internal:默认的

5.封装的好处:

▲避免使用非法数据赋值

▲保证数据的完整性

▲避免类内部发生修改时,导致整个程序的修改

二、this关键字

this:表示当前类的对象引用

可以调用当前类的成员变量和方法

注意:this不能在静态成员中使用

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApp1
{
    class Student
    {
        private string _name="灰太狼";   //姓名
        public int _age=19;    //年龄
        public string _cardID = "110882198110252476";   //身份证号

        //初始化学员的姓名
        public void SetName(string _name)
        {
            this._name = _name;
        }
        //输出学员的姓名、年龄
        public void Say()
        {
            Console.WriteLine("大家好!我叫{0},今年{1}岁。", this._name, this._age);
        }
    }
}

在这个示例中,该方法的参数_name和类成员变量_name名称相同,通过this关键字可以区分局部变量和成员变量。

三、C#属性

1.用方法保证数据的安全

Student stu = new Student();
stu._age = -2;	//年龄
stu._cardId = "123456";		//身份证号码

这样赋值不会报错,但是年龄为-2和身份证号码为123456显然不符合逻辑,那么如何保证程序数据的安全性能?

    class Student
    {
        private string _name;
        private int _age;
        public string _cardID;
        public int GetAge() 
        {
            return this._age;
        }
        ///<summary>
        ///设置年龄并有相关判断
        ///</summary>
        ///<param name="age">设置年龄</param>
        public void SetAge(int age) 
        {
            if (age < 0 || age > 100)
            {
                this._age = 19;
            }
            else 
            {
                this._age = age;
            }
        }
        static void Main(string[] args)
        {
            Student student = new Student();
            student.SetAge(-10);
            Console.WriteLine("年龄是:{0}",student.GetAge());
            student.SetAge(25);
            Console.WriteLine("年龄是:{0}", student.GetAge());
            Console.ReadLine();
        }
    }

运行结果:年龄是:19

年龄是:25

当把SetAge()方法参数设置为-10时,结果为19。这是因为在SetAge()方法中进行了判断。

虽然提出的问题被解决了,但是要写两个公用方法,微软提出了更加优化的解决方案-------属性。

2.用属性实现字段封装

①C#中类的成员
字段:私有化
方法
属性:get/set

②语法:

字段一般以下划线开头,属性则去掉下划线并且首字母要大写。

private string _name;

public string Name

{

​ get{ return _name; }

​ set{ _name = value; }

}

class Student
{
        private string _name ="灰太狼";
        private int _age;
        public string _cardID;

        public int Age
        {
            get 
            {
                return _age;
            }
            set
            {
                if (value < 0 || value > 100)
                {
                    _age = 19;
                }
                else 
                {
                    _age = value;
                }
         	}
        }
} 

③属性的数据类型:定义类中的一个属性时,属性的数据类型必须与它所访问的字段类型一致。

④属性的访问类型:

只读属性:只包含get访问器

只写属性:只包含set访问器

读写属性:包含get和set访问器

⑤对象初始化器:
User user = new User(){属性=值,属性=值…};

四、值传递和引用传递

1.值传递

​ ①基本数据类型:

​ 形参所做修改不会影响实参

​ ②引用数据类型:

​ 形参对具体值的修改会影响实参

​ (如果形参修改了指向的地址,那么接下来形参做的任何一项改变都不会影响实参)

2.引用传递(地址传递):

​ ①基本数据:形参所做修改会影响实参

​ ②引用数据:在实参和形参前面多了一个关键字:ref

注意:在参数传递过程中,不管是基本/引用数据类型传递都是地址!!!

第四章:深入C#的String类

一、常用的字符串处理方法

1.属性:

​ Length:获取字符串的长度

2.方法

static Concat():连接

Equals():比较值(堆)

staitc Format():格式化代码

{数字}:占位符,从0开始

static IsNullOrEmpty(String):既可以判断空对象的字符串,又可以判断长度为0的字符串

static String.Join(连接符号, 要被连接的数组);

Split(char):以指定字符串拆分

IndexOf(string):从前往后找,返回int类型

LastIndexOf(string):从后往前找,返回int类型

Remove(开始下标):从开始下标到length-1的内容都被删除

Remove(开始下标,长度);

Replace(String old, String newStr):替换

Substring(int 开始位置):截取

Substring(int 开始位置, int 截取的长度):截取

ToLower():转换为小写

toUpper():转换为大写

Trim():去掉前后空格

TrimStart():去掉前面的空格

TrimEnd():去掉后面的空格
注意:String类中有多个方法,没啥技巧多去记多去练习。

二、类型转换

1.隐式类型转换

将取值范围小的数值类型转换为取值范围大的数值类型,相当于Java中的强制转换。

2.显示类型转换

将取值范围大的数值类型转换为取值范围小的数值类型,相当于Java中的自动转换。

3.Parse()方法:将字符串转换为其他类型,用法xxx.Parse(string)。

4.Convert类:任何基本类型之间的相互转换。

常用Convert类的类型转换方法:

方法 说明
Convert.ToInt32() 转换为整型
Convert.ToSingle() 转换为单精度浮点型(float型)
Convert.ToDouble() 转换为双精度浮点型(double型)
Convert.ToString() 转换为字符串类型(string型)
using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            double myDouble = 85.63;    //原始数值
            int myInt;  //转换后的整型
            float myFloat;  //转换后的浮点型
            string myString;

            Console.WriteLine("原始数值为double类型:{0}",myDouble);
            //开始类型转换
            myInt = Convert.ToInt32(myDouble);
            myFloat = Convert.ToSingle(myDouble);
            myString = Convert.ToString(myDouble);

            //输出类型转换后的数据
            Console.WriteLine("转换后:");
            Console.WriteLine("int \t float \t string");
            Console.WriteLine("{0}\t {1}\t {2}",myInt,myFloat,myString);

            Console.ReadLine();
        }
    }
}

运行结果:

原初始数值为:double类型:85.63

转换后:

int float string

86 85.63 85.63

发布了14 篇原创文章 · 获赞 4 · 访问量 773

猜你喜欢

转载自blog.csdn.net/WW0724/article/details/102873728