https://www.bilibili.com/video/av66807860

00. vs ide 基本介绍

00.1 使用 debug 与 release 的不同

调试文件夹中的文件内容,包括调试文件,编译文件以及配置文件

01. 命名空间、类、主方法

02. 注释

单行注释、多行注释、块注释

/***/多行注释
//单行注释
///<summary>
///</summary>文档注释

#region 测试方法集合
#endregion 

03. 变量类型 与 数据结构

  • 基本的数据类型

    int 4个字节

    double

    float

    char类型

  • 拼接

    字符与其他的类型的变量用+进行运算表示拼接

  • 占位符

    c#支持占位符

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace _04数据类型
    {
        class Program
        {
            static void Main(string[] args)
            {
                int roomNo;
                roomNo = 1;
                double price = 300.1;
                char sex = \'女\';
                string roomType = "总统套房";
                Console.WriteLine("房间类型:{0};价格:{1}", roomType, price);
            }
        }
    }
    
    

    实际上,上述的程序还可以这样写

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace _04数据类型
    {
        class Program
        {
            static void Main(string[] args)
            {
                int roomNo;
                roomNo = 1;
                double price = 300.1;
                char sex = \'女\';
                string roomType = "总统套房";
                //Console.WriteLine("房间类型:{0};价格:{1}", roomType, price);
                Console.WriteLine($"房间类型:{roomType};价格:{price}" );
    
            }
        }
    }
    
    

04. 变量的命名规则

  • pascal命名法 每个单词的首个字母大写

    类名、方法名、接口、属性

  • canel驼峰命名法 从第二个单词开始,首字母大写

    变量名

  • C#的命名只能是数字、下划线、和字母

    但是不能使用数字开头

  • 见名知义

05. 运算符的优先级及使用

  • 算数运算符

    + - * / %
    
  • 关系运算符

    > < == != >= <=
    
  • 逻辑运算符

    || && !
    
  • 赋值运算符

    =
    

06. 占位符的使用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _07占位符的使用
{
    class Program
    {
        static void Main(string[] args)
        {
            string me;
            me = Console.ReadLine();
            string message;
            message = string.Format("今天上班遇到了“{0}”", me);
            Console.Write(message);
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _07占位符的使用
{
    class Program
    {
        static void Main(string[] args)
        {
            string me;
            me = Console.ReadLine();
            string message;
            //message = string.Format("今天上班遇到了“{0}”", me);
            message = $"今天上班遇到了“{me}”";
            Console.Write(message);
        }
    }
}

07. 选择结构之if else

08. 选择结构之switch

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _09switch选择语句
{
    class Program
    {
        static void Main(string[] args)

        {
            int age = 2;
            switch (age)
            {
                case 1:
                    Console.WriteLine($"小朋友今年一岁了");
                    break;
                case 2:
                    Console.WriteLine($"小朋友今年两岁了");
                    break;
                default:
                    break;
            }
        }
    }
}

09. 选择练习

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _10银行账户系统
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("--------------------------------欢迎登录银行账户系统--------------------------------");
            Console.Write("请输入帐号:");
            string account = Console.ReadLine();
            Console.Write("请输入密码:");
            string passWord = Console.ReadLine();
            if (account == "123456" && passWord == "abc")
            {
                Console.WriteLine("登录成功!");
                Console.WriteLine("请选择服务菜单:1、查询余额;2、取款;3、存款;4转账");
                int menuId = int.Parse(Console.ReadLine());
                switch (menuId)
                {
                    case 1:
                        Console.WriteLine("您的用户余额是:50000");
                        break;
                    case 2:
                        Console.WriteLine("请输入取款金额:");
                        break;
                    case 3:
                        Console.WriteLine("请输入存款金额:");
                        break;
                    case 4:
                        Console.WriteLine("请输入转账金额:");
                        break;
                    default:
                        break;
                }
            }
                
            else
                Console.WriteLine("密码或帐号错误,请重新输入!");
        }
    }
}

10. while循环

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _10while循环
{
    class Program
    {
        static void Main(string[] args)
        {
            int count = 1;
            while(count < 10)
            {
                Console.WriteLine($"张三简历{count} 姓名:张三");
                count += 1;
            }
        }
    }
}

11. do while 循环

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _11dowhile循环
{
    class Program
    {
        static void Main(string[] args)
        {
            int score;
            do
            {
                Console.WriteLine("请输入张三的成绩:");
                score = int.Parse(Console.ReadLine());
                if (score<60)
                    Console.WriteLine("考试不合格,重新补考");

            } while (score < 60);
            Console.WriteLine("考试通过!");
        }
    }
}

12. for循环

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _12for循环
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int i =1;i<=10;i++)
            {
                Console.WriteLine($"打印第{i}份");
            }
        }
    }
}

13. 循环进阶部分

14. 九九乘法表

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _14九九乘法表
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int i = 0;i<9;i++)
            {
                for ( int j = 0;j<=i;j++)
                {
                    Console.Write((j+1) + "x" + (i+1) + "=" + ((i+1)*(j+1)));
                    Console.Write("\t");
                }
                Console.Write("\n");

            }
        }
    }
}

15. C# 基础数组的使用和理解

  • 用于存储一组数据类型相同的数据,可以称之为数组

  • 数组的四要素

    数组标识符、数组元素、数组下标、数组类型

  • 数组一旦初始化,就不能再修改数组长度

  • 注意不要让数组下标越界

  • 数组的长度等直接封装成方法了

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _15数组的基本理解
{
    class Program
    {
        static void Main(string[] args)
        {
            string name1 = "张三";
            string name2 = "李四";
            Console.WriteLine(name1 + name2);
            // --------------------------------
            string[] names = new string[30];
            names[0] = "张三";
            names[1] = "李四";
            names[2] = name1;
            Console.WriteLine(names[2]);
            // --------------------------------
            string[] names1 = new string[]{"张三","李四","王五"};
            Console.WriteLine(names1[2]);
            for (int i = 0;i<names1.Length;i++)
            {
                Console.WriteLine(names1[i]);
            }
        }
    }
}

16. 类和对象

网站连接

  • 类 :抽象的(模板) 不占用内存空间
  • 对象:具体的(真是存在的)对象占用内存空间

代码块1

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _16类和对象
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建一个学生
            Student student1 = new Student();
            student1.Name = "张三";
            student1.Age = 22;
            student1.Sex = \'男\';
            student1.Phone = "18889u9897987";

            Student student2 = new Student();
            student2.Name = "李四";
            student2.Age = 212;
            student2.Sex= \'女\';
            student2.Phone = "188899897987";
            Console.WriteLine($"姓名:{student2.Name}{student2.Age}");

            Student[] students = new Student[] { student1, student2 };
            for (int i =0;i<students.Length;i++)
            {
                Console.WriteLine($"学生姓名:{students[i].Name},学生性别:{students[i].Sex}");
                students[i].xtxi();
            }

        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _16类和对象
{
    public class Student
    {
        // 静态特征:用来描述
        /// <summary>
        /// 学生姓名
        /// </summary>
        public string Name;
        /// <summary>
        /// 学生年龄
        /// </summary>
        public int Age;
        /// <summary>
        /// 性别
        /// </summary>
        public char Sex;
        /// <summary>
        /// 电话
        /// </summary>
        public string Phone;


        // 动态特征
        /// <summary>
        /// 学习(相当于功能  方法 动态特征)
        /// </summary>
        public void xtxi()
        {
            Console.WriteLine(this.Name+"正在看书");
        }
     }
}

17. 无参方法

视频连接

如果没有返回值,就用void;如果有返回值,就用int、string等,但是返回的要与定义的类型相一致。

18. 带参方法

视频连接

方法里面有参数,主要是可以将参数值直接传入方法或者函数中,这种较为常规
主函数

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _18带参方法
{
    class Program
    {
        static void Main(string[] args)
        {
            Lamp lamp = new Lamp();
            lamp.Open();
            lamp.Close();

            Zhazhiji zhazhi = new Zhazhiji();
            string  fruit = zhazhi.Zhazhi("苹果");
            Console.WriteLine(fruit);
        }
    }
}

子函数

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _18带参方法
{
    /// <summary>
    /// 榨汁机类
    /// </summary>
    public class Zhazhiji
    {
        /// <summary>
        /// 形成榨汁机
        /// </summary>
        /// <param name="fruit">水果</param>
        /// <returns></returns>
        public string Zhazhi(string fruit)
        {

            string result = fruit + "汁";
            return result;
        }
    }
}

19. 流程控制关键字

  • break

    可以用于switch while if 中

  • continue

    循环中

  • return

    通常是在方法中使用

    静态方法中不能调用非静态的任何成员?

    结束当前方法、可以返回计算结果 都是用来控制整个程序运行过程中的命令

20. 访问修饰符

private 属性和方法默认的是这个 只能自己类的内部访问

protected 可以被继承

internal 类默认是这个 在同一个命名空间可以使用 或者说在同一个项目中可以使用

public 可以随便调用

继承之后 用 base.Name

主程序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using testProject;//引用另外一个项目

namespace _20访问修饰符
{
    class Program
    {

        static void Main(string[] args)
        {
            // --------------------------------教师类实例化
            Teacher tea1 = new Teacher();
            tea1.Test();
            // --------------------------------学生类实例化
            Student stu1 = new Student();
            stu1.StudentName="张x三";
            Console.WriteLine(stu1.StudentName);
        }
    }
}

同命名空间 类1 基类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace _20访问修饰符
{
    /// <summary>
    /// 定义雇员类
    /// </summary>
    class Employee
    {
        protected string Name;

    }
}

同命名空间 类2 子类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _20访问修饰符
{
    /// <summary>
    /// 定义继承于雇员的教师类
    /// </summary>
    internal class Teacher:Employee
    {
        /// <summary>
        /// 定义公有方法,test
        /// </summary>
        public void Test()
        {
            Name = "张三";
            Console.WriteLine(Name);
        }

    }
}

其他命名空间 引用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace testProject
{
    /// <summary>
    /// 定义学生类
    /// </summary>
    public class Student
    {
        public string StudentName;
    }
}

21. vs调试运行

F5调试运行

F10逐步调试

F11逐句调试 如果有方法,会直接调入到方法之中

22. 引用类型和值类型

值类型一般都是基于两个基类,分别是System.ValueType和Object

  • System.ValueType

    值类型:int short long float double decimal char bool enum struct

    注意:在声明变量的时候,编译器始终会给他分配内存空间 存储于栈

  • Object

    引用类型:object string Array(int[]) class interface 委托delegate

    注意:在声明或者定义变量的时候,编译器会存储一个地址,地址存放于栈 在信息存储于堆

主函数

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _22引用类型和值类型
{
    class Program
    {
        static void Main()
        {
            Dog dog = new Dog();//实例化
            dog.age = 8;
            ChangeDogAge(dog);
            Console.WriteLine(dog.age);


            int age = 19;
            ChangeAge(age);
            Console.WriteLine(age);
            Console.Read();
        }
        public static void ChangeAge(int age)
        {
            age = 20;
        }
        public static void ChangeDogAge(Dog dog2)
        {
            dog2.age = 5;
        }
    }
}

同命名空间的子类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _22引用类型和值类型
{
    class Dog
    {
        public string Name;
        public string Color;
        public int age;
        public void Read()
        {
            Console.WriteLine($"{this.Color}的{this.Name}在学习");
        }

    }
}

23. 引用传参

对于值类型,其在方法中传递的时候,通常是值传递,如果想要变成地址传递,则需要在前面加上ref ,从而实现地址传递

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _23引用传参
{
    class Program
    {
        static void Main(string[] args)
        {
            int num1 = 1;
            int num2 = 2;
            Console.WriteLine($"交换前:{num1}-{num2}");
            Swap(ref num1, ref num2);
            Console.WriteLine($"交换后:{num1}-{num2}");
            Console.Read();
        }
        public static void Swap(ref int num1,ref int num2)
        {
            int temp = num1;
            num1 = num2;
            num2 = temp;

        }
    }
}

24. 类型转换

网站连接

  • 数字类型之间的转换

    包括隐式转换和显示转换,其中隐式转换也成为自动转换,显示转换称之为强行转换

  • 字符串转换为数字类型 Parse TryParse

  • 将任意类型转换为指定类型

    Convert.ToInt32()可以实现将任何类型转换为该类型

  • 字符类型

    char类型可以直接转换为数字

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _24类型转换
{
    class Program
    {
        static void Main(string[] args)
        {

            // --------------------------------数字类型之间的相关转换
            //int price1 = 100;

            //double price2 = price1;// 隐式转换

            //int price3 =(int) price2;// 显式转换
            // --------------------------------字符串类型转换为数字类型
            //Console.Write("请输入一个学生的年龄:");

            //int age = int.Parse(Console.ReadLine());
            //Console.WriteLine($"学生的年龄是:{age}");

            // --------------------------------字符串类型转换为数字类型 异常捕获
            //Console.Write("请输入一个学生的年龄:");

            //int age;
            //bool result = int.TryParse(Console.ReadLine(),out age);
            //if (result)
            //    Console.WriteLine($"学生的年龄是:{age}");
            //else
            //    Console.WriteLine("输入的不是数字!");
            //--------------------------------将任意类型转换为指定类型
            object str = "123";
            int money = Convert.ToInt32(str);
            Console.WriteLine(money);
            //--------------------------------将字符串转换为时间类型
            object str1 = "1993年1月12日";
            DateTime money1 = Convert.ToDateTime(str1);
            Console.WriteLine(money1);

        }
    }
}

25. 字符串的处理方法

主要是字符串的一些封装好的方法

.IndexOf() // 从前面开始找

.LastIndexOf() // 从后面开始找

.Substring(index) //从指定的数字之后的字符串

.ToLower() //转换为小写

.ToUpper() // 转换为大写

判断对比的时候 == 对比的是地址 equals 对比的是值

如果是引用类型的话,两个是一样 字符串和对象 最好用equals

.Join() // string 的函数,按照指定的连接方式,将字符串数组进行连接

.Split() //作用于数组,将数组按照指定的字符进行分割

.Trim() // 去掉两端的空格

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _25字符串的处理方法
{
    class Program
    {
        static void Main(string[] args)

        {
            // -------------------------------- 获取指定的字符所在的index
            // 字符串的处理方式
            // IndexOf()
            string email = "mrxiuhong@163.com";
            int index = email.LastIndexOf(\'@\');
            //int index = email.IndexOf(\'d\');
            if (index < 0)
                System.Console.WriteLine("所查找的字符不存在!");
            else
                System.Console.WriteLine($"@所在的位置是{index}");
            
            string substring = email.Substring(index + 1);
            Console.WriteLine(substring.ToUpper());
            // --------------------------------字符的对比
            if (email.Equals("mrxiuhong@qq.com"))
                Console.WriteLine("值相等");
            else
                Console.WriteLine("值不相等");
            // -------------------------------- 数组连接
            string[] newStr = new string[] { "abc", "edf" };
            string str = string.Join("-",newStr);
            Console.WriteLine($"数组连接{str}");
            // -------------------------------- 数组分割
            string[] newStr1 = str.Split(\'-\');
            for (int i =0;i<newStr1.Length;i++) 
                Console.WriteLine($"数组分割{newStr1[i]}");

            // -------------------------------- 空格的问题
            string myStr = Console.ReadLine();
            if (myStr.Equals("mrxiuhong"))
            {
                Console.WriteLine("正确");
            }
            else
            {
                Console.WriteLine("错误");
            }

            // -------------------------------- Trim()  把 两端的空格去掉
            if (myStr.Trim().Equals("mrxiuhong"))
            {
                Console.WriteLine("正确");
            }
            else
            {
                Console.WriteLine("错误");
            }
        }
    }
}

26. 对象数组

数组可以存放一组相同类型的数据

对象数组可以存放不同类型的数据

所谓的对象数组就是将类 构成一个数组 这个数组中,可以包括不同类型的属性

Program 类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _26对象数组
{
    class Program
    {
        static void Main(string[] args)
        {
            // -------------------------------- 常规的数组类型--------------------------------
            string name = "张三";
            string[] names = new string[] { "张三", "李四", "王五" };
            int[] ages = new int[] { 12, 15, 23 };
            // -------------------------------- 对象数组 --------------------------------
            Student[] students = new Student[30];
            // --------------------------------学生1
            Student stu1 = new Student();
            stu1.StuName = "张三";
            stu1.ClassName = "一年级";
            stu1.Age = 14;
            stu1.StuNum = "S12090414";
            // --------------------------------学生2
            Student stu2 = new Student();
            stu2.StuName = "李四";
            stu2.ClassName = "二年级";
            stu2.Age = 20;
            stu2.StuNum = "22090414";
            // -------------------------------- 将学生放置于数组之中
            students[0] = stu1;
            students[1] = stu2;

            // -------------------------------- 学生数组的打印
            for (int i = 0; i < students.Length; i++)
            {
                Student stu = students[i];
                if (stu!=null)
                    Console.WriteLine($"{students[i].StuName}的年龄是{students[i].Age},在{students[i].ClassName},学号是{students[i].StuNum}");
            }
        }
    }
}

Student类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _26对象数组
{
    class Student
    {
        /// <summary>
        /// 编号 
        /// </summary>
        public string StuNum;
        /// <summary>
        /// 姓名
        /// </summary>
        public string StuName;
        /// <summary>
        /// 年龄
        /// </summary>
        public int Age;
        /// <summary>
        /// 班级
        /// </summary>
        public string ClassName;
    }
}

27. 构造方法

构造方法与常规的方法的差别在于:

  • 构造方法的名称与类的名称一致(如果写了一个构造方法,则原有的构造方法将被销毁)
  • 构造方法是没有返回值的
  • 当手动定义构造方法的时候,默认的构造方法自动覆盖
  • 构造方法在构造的时候,默认执行

构造方法通常为初始化使用

Program类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _27构造方法
{
    class Program
    {
        static void Main(string[] args)
        {
            // -------------------------------- 常规的数组类型--------------------------------
            string name = "张三";
            string[] names = new string[] { "张三", "李四", "王五" };
            int[] ages = new int[] { 12, 15, 23 };
            // -------------------------------- 对象数组 --------------------------------
            Student[] students = new Student[30];
            // --------------------------------学生1
            Student stu1 = new Student();
            stu1.StuName = "张三";
            stu1.ClassName = "一年级";
            stu1.Age = 14;
            stu1.StuNum = "S12090414";
            // --------------------------------学生2
            Student stu2 = new Student();
            stu2.StuName = "李四";
            stu2.ClassName = "二年级";
            stu2.Age = 20;
            stu2.StuNum = "22090414";
            // --------------------------------学生3
            Student stu3 = new Student("S16020279","韩秀虹","研16-3班",26);
            // -------------------------------- 将学生放置于数组之中
            students[0] = stu1;
            students[1] = stu2;
            students[2] = stu3;
            // -------------------------------- 学生数组的打印
            for (int i = 0; i < students.Length; i++)
            {
                Student stu = students[i];
                if (stu != null)
                    Console.WriteLine($"{students[i].StuName}的年龄是{students[i].Age},在{students[i].ClassName},学号是{students[i].StuNum}");
            }
        }
    }
}

Student类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _27构造方法
{
    class Student
    {
        public Student()
        {

        }
        public Student(string stuNum,string stuName,string className,int age)
        //public Student()
        {
            this.StuName = stuName;
            this.StuNum = stuNum;
            this.Age = age;
            this.ClassName = className;

        }
        public void XueXi()
        {

        }
        public string StuNum;
        public string StuName;
        public string ClassName;
        public int Age;

    }
}

Dog类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _27构造方法
{
    class Dog
    {
        public string Name;
        public string Color;
        public int Age;
        public bool Run()
        {
            System.Console.WriteLine($"{this.Color}的{this.Name}跑起来");
            bool result = true;
            return result;
        }
    }
}

28. 方法重载

定义:在同一个类中,方法的名称相同,参数的个数或者类型不同(返回值不参与定义讨论)

Program类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _28方法重载
{
    class Program
    {
        static void Main(string[] args)
        {
            // -------------------------------- 常规的数组类型--------------------------------
            string name = "张三";
            string[] names = new string[] { "张三", "李四", "王五" };
            int[] ages = new int[] { 12, 15, 23 };
            // -------------------------------- 对象数组 --------------------------------
            Student[] students = new Student[30];
            // --------------------------------学生1
            Student stu1 = new Student();
            stu1.StuName = "张三";
            stu1.ClassName = "一年级";
            stu1.Age = 14;
            stu1.StuNum = "S12090414";
            // --------------------------------学生2
            Student stu2 = new Student();
            stu2.StuName = "李四";
            stu2.ClassName = "二年级";
            stu2.Age = 20;
            stu2.StuNum = "22090414";
            // --------------------------------学生3================================
            Student stu3 = new Student("S16020279","韩秀虹","研16-3班",26);
            stu3.XueXi(stu3.StuName);
            // -------------------------------- 将学生放置于数组之中
            students[0] = stu1;
            students[1] = stu2;
            students[2] = stu3;
            // -------------------------------- 学生数组的打印
            for (int i = 0; i < students.Length; i++)
            {
                Student stu = students[i];
                if (stu != null)
                    Console.WriteLine($"{students[i].StuName}的年龄是{students[i].Age},在{students[i].ClassName},学号是{students[i].StuNum}");
            }
        }
    }
}

Dog类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _28方法重载
{
    class Dog
    {
        public string Name;
        public string Color;
        public int Age;
        public bool Run()
        {
            System.Console.WriteLine($"{this.Color}的{this.Name}跑起来");
            bool result = true;
            return result;
        }
    }
}

Student类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _28方法重载
{
    class Student
    {
        public Student()
        {

        }
        public Student(string stuNum,string stuName,string className,int age)
        //public Student()
        {
            this.StuName = stuName;
            this.StuNum = stuNum;
            this.Age = age;
            this.ClassName = className;

        }
        public void XueXi()
        {
            Console.WriteLine("开始学习");
        }
        public void XueXi(string name)
        {
            Console.WriteLine($"{name}开始学习");
        }
        public string StuNum;
        public string StuName;
        public string ClassName;
        public int Age;

    }
}

29. ArrayList集合

在使用前,应该 using System.Collections
与数组的差别在于,集合的长度是可以变化的,并不像数组一样,都是固定的

  • 添加
    .Add();
    注意:在设置集合的时候,集合中的元素为集合的类型 , 需要通过强制转换将元素转换为实际的类型

  • 删除
    .RemoveAt(index);

主程序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;

namespace _29ArrayList集合
{
    class Program
    {
        static void Main(string[] args)
        {
            Student stu1 = new Student("S16020279","韩秀虹","研1603班",26);
            Student stu2 = new Student("S16020278","冯伟","研1603班",26);
            
            ArrayList arrayList = new ArrayList();
            arrayList.Add(stu1);
            arrayList.Add(stu2);
            Console.WriteLine("----修改前----");
            for (int i =0;i<arrayList.Count;i++)
            {
                Student stu = (Student) arrayList[i];
                System.Console.WriteLine(stu.ClassName+\'-\'+stu.StuName);
            }
            // --------------------------------修改↓
            Student fengWei = (Student)arrayList[1];
            fengWei.Age = 22;
            fengWei.StuName = "李四";
            fengWei.ClassName = "理科实验班4班";
            // --------------------------------修改↑
            Console.WriteLine("----修改后----");
            for (int i = 0; i < arrayList.Count; i++)
            {
                Student stu = (Student)arrayList[i];
                System.Console.WriteLine(stu.ClassName + \'-\' + stu.StuName);
            }
            // -------------------------------- 删除
            arrayList.RemoveAt(1);
            Console.WriteLine("----删除后----");
            for (int i = 0; i < arrayList.Count; i++)
            {
                Student stu = (Student)arrayList[i];
                System.Console.WriteLine(stu.ClassName + \'-\' + stu.StuName);
            }
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _29ArrayList集合
{
    class Student
    {
        public Student()
        {

        }
        public Student(string stuNum,string stuName,string className,int age)
        //public Student()
        {
            this.StuName = stuName;
            this.StuNum = stuNum;
            this.Age = age;
            this.ClassName = className;

        }
        public void XueXi()
        {
            Console.WriteLine("开始学习");
        }
        public void XueXi(string name)
        {
            Console.WriteLine($"{name}开始学习");
        }
        public string StuNum;
        public string StuName;
        public string ClassName;
        public int Age;

    }
}

30. Hashtable集合

需要调用System.Collections;

哈希表,无序,通过键值对的方式进行使用

.Add() //添加键值对

.Remove()//删除键

取值:Student stu = (Student) ht[“keys”];

foreach (val obj in ht.Values)

{

}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;

namespace _30Hashtable集合
{
    class Program
    {
        static void Main(string[] args)
        {
            Hashtable ht = new Hashtable();
            Student stu1 = new Student("S1", "张三", "三班", 16);
            Student stu2 = new Student("S2", "李四", "四班", 16);
            Student stu3 = new Student("S3", "王五", "五班", 16);
            ht.Add("学生1", stu1);
            ht.Add("学生2", stu2);
            ht.Add("学生3", stu3);
            // -------------------------------隐式转换类型
            foreach  (Student stu in ht.Values)
            {

                Console.WriteLine(stu.StuName);
            }
            // --------------------------------显式转换类型
            foreach (Object obj in ht.Values)
            {
                Student stu = (Student)obj;
                Console.WriteLine(stu.StuName);
            }
            // -------------------------------key
            foreach (string stu in ht.Keys)
            {

                Console.WriteLine(stu);
            }
            //--------------------------------取值
            Student myStu =(Student) ht["学生1"];
            Console.WriteLine(myStu.StuName);

        }
    }
}

31. 泛型集合list

需要实现调用:using System.Collections.Generic;

List 可以直接形成T类型的数组

可以不用进行类型转换,就直接是T类型

  • 省了 装箱拆箱、类型转换,可以大幅提高性能
  • 数据操作比较安全
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Collections;

namespace _31泛型集合list
{
    class Program
    {
        static void Main(string[] args)
        {
            /*
             * List泛型集合
             * 
             * 数组:用于存放一组数据类型相同的值,缺点是,长度不可变
             * 
             * ArrayList:长度可变,缺点:存放的值是Object类型,Object是许多类型的基类;可以存放任意的值
             */

            // -------------------------------- arraylist   如果在集合中添加了一个其他类型的数组,其实也可以添加,但是读取的时候就麻烦了
            ArrayList studentList = new ArrayList();
            studentList.Add(new Student("S1", "张三", "三班", 16));
            studentList.Add(new Student("S2", "李四", "三班", 16));
            studentList.Add(new Student("S3", "王五", "三班", 16));
            foreach (Student stu in studentList)
            {
                Console.WriteLine(stu.StuName);
            }
            // -------------------------------- 数组 数组不可以添加其他类型的元素  数组长度不可变
            // -------------------------------- List类型
            List<Student> stuList = new List<Student>();
            stuList.Add(new Student("S1", "张三", "三班", 16));
            stuList.Add(new Student("S2", "李四", "三班", 16));
            stuList.Add(new Student("S3", "王五", "三班", 16));
            for (int i =0;i<stuList.Count;i++)
            {
                Console.WriteLine(stuList[i].StuName);
            }
        }
    }
}

32. 泛型字典集合Dictionary

using System.Collections.Generic;

这个与hashtable的差别就是

Dictionary<string, Student> dict = Dictionary<string, Student> ();

差别在于避免了装箱拆箱

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Generic;

namespace _32Dictionary泛型字典集合
{
    class Program
    {
        static void Main(string[] args)
        {
            /*
             * arraylist
             * hashtable
             * list<t>
             * dictionary<t,k>
             * */
            Student stu1 = new Student("S1", "张三", "三班", 16);
            Student stu2 = new Student("S2", "李四", "四班", 18);
            Student stu3 = new Student("S3", "王五", "五班", 20);
            Dictionary<string, Student> dict = new Dictionary<string, Student>();
            dict.Add("学生1", stu1);
            dict.Add("学生2", stu2);
            dict.Add("学生3", stu3);
            Student stu = dict["学生1"];
            Console.WriteLine(stu.StuName);
        }
    }
}

33. sqlServer的安装与使用

下载sqlServer2014 网址

本地连接

安装步骤:网址

安装成功之后,使用SQL Server 2014 Management Studio打开


34. SQL配置详解

登录

登录的时候,可以选择本地登录或者远程登录,身份验证的方式有两种,分别是windows管理员和用户密码登录

第一次登录,需要在安全性中对登录名进行设置,最大权限是sysadmin

开启混合登录

1570598671835

开启TCP/IP协议

1570598717075

只有开启tcp/ip协议,才能进行远程数据库连接


35. 数据库基本概念

(1)基本信息

区别:数据库与数据库工具

基本概念:

  • 持久化:永久保存在物理磁盘
  • 临时存储:存储在内存中

记事本、word、excel、ppt等都是无序的,数据库是有序的

网上的数据都是从数据库中动态读取的

建立数据库:相当于建立一个数据仓库

.mdf文件为存放数据的文件

1570600603596

数据库的删除:

1570600808410

数据库的附加

1570600986679

(2)表

1570601460404

为了避免重复,要设置ProductNum为主键

编辑的时候,可以往里面添加相关的数据

手动添加的非常少,一般来说都是通过脚本进行操作:增、删、改、查

1570604305222

36. 使用T-SQL脚本

主键

use JINGDONGDB
go

— 注释

-- 添加  T-SQL 
insert into Product(ProductNum,ProductName,ProductImage,ProductPrice)
values(1003, \'华为MATE20\',\'/IMAGE/MATE20.JPG\',9000)
-- 删除 delete  from可以删除  数据永久更新操作
delete from Product
where ProductNum=1002
-- 修改 update   其中 where是条件,在每个地方都可以使用
update Product
set ProductName = \'mate30\',ProductImage = \'/huawei.new.jpg\'
where ProductNum = 1003
-- 查询 常见的有三种,一条、多条、聚合函数
-- select * from Product  -- 其中 * 表示所有的字段
select ProductNum,ProductName from Product
-- where ProductNum > 1000
where ProductNum > 1000 or ProductPrice >5000
-- and
-- or 
-- 

37. 数据的关联性

  • 构建一个表

1570623846870

  • 在原表中添加列名

1570623886455

  • 设置主键表与外键表之间的对应
  • 关系

1570623939753

通过上述三个步骤,可以将数据进行关联

38. 表联接查询

表的联接方式分为几种,分别是内联接、左外联接、右外联接

  • 内联接
-- 内联接 inner join
select ProductNum, ProductName, ProductImage, ProductPrice, Product.typeId,ProductType.typeName
from Product inner join ProductType
on(Product.typeId = ProductType.typeId) -- 主要是通过主表和值表的联接的id进行联接   对于其中的主表中的其他的id都没有显示

-- 内联接 inner join  无限扩充
select ProductNum, ProductName, ProductImage, ProductPrice, Product.typeId,ProductType.typeName
from Product
inner join ProductType
on(Product.typeId = ProductType.typeId) -- 主要是通过主表和值表的联接的id进行联接   对于其中的主表中的其他的id都没有显示
inner join brand
on (Product.brandId = brand.brandId)
-- 内联接 的第二种方式  inner join  在原理上 以及 性能上 基本上一样
select ProductNum, ProductName, ProductImage, ProductPrice, Product.typeId,ProductType.typeName
from Product , ProductType
where Product.typeId = ProductType.typeId -- 主要是通过主表和值表的联接的id进行联接   对于其中的主表中的其他的id都没有显示

  • 左外联接
-- 左外联接  left join 以左表为基准进行显示,如果匹配到了,则显示,否则不显示
select ProductNum, ProductName, ProductImage, ProductPrice, Product.typeId,ProductType.typeName
--from Product left join ProductType
from ProductType left join Product
on(Product.typeId = ProductType.typeId) -- 主要是通过主表和值表的联接的id进行联接   对于其中的主表中的其他的id都没有显示

  • 右外联接
-- 右外联接 right join
select ProductNum, ProductName, ProductImage, ProductPrice, Product.typeId,ProductType.typeName
from Product right join ProductType
--from ProductType right join Product
on(Product.typeId = ProductType.typeId) -- 主要是通过主表和值表的联接的id进行联接   对于其中的主表中的其他的id都没有显示

  • 利用as进行简化
--  利用 as 进行简化
select ProductNum as 编号, ProductName, ProductImage, ProductPrice, Product.typeId,ProductType.typeName
from Product right join ProductType
--from ProductType right join Product
on(Product.typeId = ProductType.typeId) -- 主要是通过主表和值表的联接的id进行联接   对于其中的主表中的其他的id都没有显示

  • 利用 a b 进行简化
--   利用 a  b 进行简化
select ProductNum , ProductName, ProductImage, ProductPrice, a.typeId,b.typeName
from Product a right join ProductType b
--from ProductType right join Product
on(a.typeId = b.typeId) -- 主要是通过主表和值表的联接的id进行联接   对于其中的主表中的其他的id都没有显示

39. 聚合函数的使用

-- 聚合函数(count,avg,sum,max,min)

-- ================================count================================
-- count 统计记录条数  伪列  count(1) 其中1表示伪列  因为根本没有1这个列  伪列是绝对不能为空的 
-- 列的值为NULL不参与统计
-- 使用主键进行查询
select count(ProductNum) from Product
-- 使用所有字段进行查询
select count(*) from Product
-- 使用伪列进行查询  性能最好
select count(1) as _count from Product
select 1,* from Product

-- ================================avg================================
-- 求平均 数字 日期
select AVG(ProductPrice) as _avg from Product

-- ================================sum================================
-- 求总和
select SUM(ProductPrice) as _sum from Product
where typeId = 1  -- 只求手机

-- ================================max================================
select MAX(ProductPrice) as _max from Product

40. 排序和分组

版权声明:本文为sauhom原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/sauhom/p/11634484.html