美文网首页
C#基础二刷

C#基础二刷

作者: 山猪打不过家猪 | 来源:发表于2022-08-23 17:57 被阅读0次
1. 字符串格式化
static void Main(string[] args)
{
    //方法一:
    string name = "Fxx";
    string email_type = "qq";
    string my_info = "邮箱用户名:{0};邮箱类型{1}";
    my_info = string.Format(my_info, name, email_type);
    //方法二:
    string a = string.Format("邮箱用户名:{0};邮箱类型{1}", name, email_type);
    //方法三:
    string b = $"邮箱用户名:{name};邮箱类型{email_type}";
}

2. 数组
  • 同时储存相同类型的数据的
static void Main(string[] args)
{
    //方法一
    int[] aa = new int[] { 1, 2, 3, 4, 5 };
    //方法二:
    int[] bb = { 1, 2, 3, 4, 5 };
}

  • 循环数组foreach(元素变量 临时变量名 in 集合或者集合名)
static void Main(string[] args)
{
    int[] aa = new int[] { 1, 2, 3, 4, 5 };
    //foreach(元素类型 变量名 in 集合或者数组名)
    foreach (int i in aa)
    {
        Console.WriteLine(i);
    }
}
3. 面向对象该思考的问题
image.png
4. 类的定义规范
image.png
  • Student.cs

namespace ConsoleApp1
{

    /// <summary>
    /// 学员类
    /// </summary>
    class Student
    {
        //字段:ID(私有)
        private int stuId;
        //字段:姓名
        private string stuName;
        //属性:ID(公有)
        public int StudId
        {
            get { return stuId; }
            set { stuId = value; }
        }
        //属性:姓名
        public string StuName
        {
            get { return stuName; }
            set { stuName = value; }
        }

        //方法:获取学院信息
        public void GetStudent()
        {
            string stuInfo = string.Format("姓名:{0},学号{1}.", StudId, StuName);
            Console.WriteLine(stuInfo);
        }
    }
}

  • Main.cs(无构造函数,需要类.属性来设置)
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建对象
            Student stu1 = new Student();
            //给属性赋值
            stu1.StudId = 1;
            stu1.StuName = "fxx";
            //调用对象方法
            stu1.GetStudent();
        }
    }   
}
  • 访问修饰符:
    ①private,成员变量,一般在类的内部做数据交互使用,一般使用private,使用小驼峰,通俗理解,私有方法和属性,就类似于人体内的器官和各种系统,只在我们人类的身体内交互;
    ②public,外部使用,接口,公共方法,
  • 字段和属性的作用
    字段:主要用于内部交互,一般为private,如果需要提供给外部使用的时候,要封装成为属性,而不是公共字段
    属性:一般用于外部提供数据,用于描述静态特征,一般是public,属性可以根据设计为 只读,只写,并且添加业务逻辑,提高数据安全
5. 类的方法

访问修饰符(private,public) 返回类型(void,string,int,对象,任何类型都可以当返回值) 方法名(数据类型 参数名1,数据类型 参数名2){
//方法
}

6. 构造方法
//加上这个就可用对象.属性来添加
public Student()
{

}
public Student(int id)
{
    this.StudId = id;
}
public Student(int id, string name, int age):this(id)
        {
    this.StuName = name;
    this.Age = age;
}

7. 对象初始化器

与构造方法的差别:
相同点:都可以完成对象的初始化
不同点:
①构造方法具有强制化,必须一一对应(希望用户初始化),初始化器没有强制性
②初始化器只能对属性进行初始化,而构造方法可以对任何需要初始化的工作进行,如对象创建是读取文件等
③初始化器在创建对象时候使用,而构造方法卸载类里面


image.png
  • 这种方式必须知道参数的个数和参数的位置
Stedent stu = new  Student(){
    Birthday = Convert.ToDateTime("19910101"),
    StudentId = 10005,
    StudentName = "Lil Red"
}
8. 泛型集合List<T>

使用泛型集合只能添加一种类型的数据,数据取出后无需强制转换,拆箱
T是Type的简写, 表示可以是任何不确定的具体类型。

  • Student.cs
namespace ConsoleApp1
{
    class Student
    {
        public Student() { }
        public Student(int id,string stuNam)
        {
            this.Id = id;
            this.StuName = stuNam;
        }
        public int Id { get; set; }
        public string StuName { get; set; }
    }
}

  • run.cs
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建多个学员对象
            Student stu1 = new Student(1001,"fxx1");
            Student stu2= new Student(1002,"fxx2");
            Student stu3 = new Student(1003,"fxx3");
            Student stu4 = new Student(1004,"fxx4");
            Student stu5 = new Student(){};
            //创建集合添加元素
            List<Student> stuList = new List<Student>();
            stuList.Add(stu1);
            stuList.Add(stu2);
            stuList.Add(stu3);
            stuList.Add(stu4);
            stuList.Add(new Student() { 
                StuName ="fxx5",
                Id =1005      
            });
            //获取元素个数
            Console.WriteLine("集合内的元素个数是:{0}",stuList.Count);
            //删除元素
            stuList.RemoveAt(0);
            stuList.Remove(stu5);
            //遍历泛型集合
            foreach (Student stu in stuList)
            {
                Console.WriteLine($"学员姓名:{stu.StuName},学员ID{stu.Id}");

            }
        }
    }
}

8. 泛型字典Dictionary<K,V>
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建多个学员对象
            Student stu1 = new Student(1001,"fxx1");
            Student stu2= new Student(1002,"fxx2");
            Student stu3 = new Student(1003,"fxx3");
            Student stu4 = new Student(1004,"fxx4");
            //创建字典
            Dictionary<string, Student> stuDic = new Dictionary<string, Student>();
            //添加成员
            stuDic.Add("Fxx1", stu1);
            stuDic.Add("Fxx2", stu2);
            stuDic.Add("Fxx3", stu3);
            stuDic.Add("Fxx4", stu4);
            //遍历字典
            foreach (KeyValuePair<string, Student> item in stuDic)
            {
                Console.WriteLine($"字典的Key是{item.Key},字段的值是{item.Value},值里的学生信息是{item.Value.StuName}");
            }
        }
    }
}

9.集合排序

默认排序
普通类型的集合直接使用List.sort()

//普通集合
List<string> nameList = new List<string>() { "fxx2", "fxx1", "fxx3", "fxx5" };
//升序
nameList.Sort();

对象类型需要让排序的对象继承排序接口

  • Student.cs
class Student : IComparable<Student>
{
    public Student() { }
    public Student(int id, string stuNam)
    {
        this.Id = id;
        this.StuName = stuNam;
    }
    public int Id { get; set; }
    public string StuName { get; set; }

    //接口的实现接口
    public int CompareTo(Student other)
    {
        //降序(other在前降序)
        //return other.Id.CompareTo(this.Id);
        //other在后,升序
        return this.Id.CompareTo(other.Id);
    }
}
  • run.cs
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建多个学员对象
            Student stu1 = new Student(1001,"fxx1");
            Student stu2= new Student(1002,"fxx2");
            Student stu3 = new Student(1003,"fxx3");
            Student stu4 = new Student(1004,"fxx4");

            //对象集合
            List<Student> stuList = new List<Student>() { stu2, stu4, stu3, stu1 };
            stuList.Sort();
            foreach (Student item in stuList)
            {
                Console.WriteLine(item.Id+item.StuName);
            }
        }
    }
}

对象动态排序

  • 添加四个排序类

namespace ConsoleApp1
{
    class Student
    {
        public Student() { }
        public Student(int id,string stuNam)
        {
            this.Id = id;
            this.StuName = stuNam;
        }
        public int Id { get; set; }
        public string StuName { get; set; }

    }
    #region 四个排序类
    //添加四个排序类
    class StuNameAsc : IComparer<Student>
    {
        public int Compare(Student x, Student y)
        {
            //升序
            return x.StuName.CompareTo(y.StuName);
        }
    }
    class StuNameDesc : IComparer<Student>
    {
        public int Compare(Student x, Student y)
        {
            return y.StuName.CompareTo(x.StuName);
        }

    }
    class IdAsc : IComparer<Student>
    {
        public int Compare(Student x, Student y)
        {
            return x.Id.CompareTo(y.Id);
        }

    }
    class IdDesc
    {
        public int Compare(Student x, Student y)
        {
            return y.Id.CompareTo(x.Id);
        }

    }

    #endregion
}

  • 使用
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建多个学员对象
            Student stu1 = new Student(1001,"fxx1");
            Student stu2= new Student(1002,"fxx2");
            Student stu3 = new Student(1003,"fxx3");
            Student stu4 = new Student(1004,"fxx4");

            //对象集合
            List<Student> stuList = new List<Student>() { stu2, stu4, stu3, stu1 };
            //姓名升序
            stuList.Sort(new StuNameAsc());
            foreach (Student item in stuList)
            {
                Console.WriteLine(item.Id+item.StuName);
            }
            //姓名降序
            stuList.Sort(new StuNameDesc());
            foreach (Student item in stuList)
            {
                Console.WriteLine(item.Id + item.StuName);
            }
        }
    }
}

相关文章

  • C#基础二刷

    1. 字符串格式化 2. 数组 同时储存相同类型的数据的 循环数组foreach(元素变量 临时变量名 in 集合...

  • C#学习笔记

    C#中的线程(一)入门 C#中的线程(二) 线程同步基础 C#中的线程(三) 使用多线程 20190130补充: ...

  • c#集合

    C#基础知识简单梳理

  • 你好呀LeetCode C#版

    没事刷题缓解焦虑。 最近工作中用到C#较多,所以代码以C#完成,主要先刷 Top 100 Liked Questi...

  • 黑马训练营Asp.Net第2期完整版

    初级 .Net入门教程_.Net入门视频教程|黑马程序员 C#基础教程_C#基础视频教程_黑马程序员 .Net基础...

  • Winform

    C# WinForm实践开发教程 C# WinForm实践开发教程——第一章 Windows编程基础C# WinF...

  • C#/.Net学习资料

    C#开发轻松入门——基础入门(慕课网) 零基础学C#(一)——基础入门(网易云课堂明日科技) 45分钟C#快速入门...

  • C#/.net学习资料

    C#开发轻松入门——新手基础入门(慕课网) 零基础学C#(一)——新手基础入门(网易云课堂明日科技) 45分钟C#...

  • 二刷前端基础

    杂谈 2020真的是迷幻的一年,过年就到处是新冠感染者。每天大家都是缩在家里看统计数据,无聊又不敢往外走,虽然说确...

  • SQL基础二刷

    1.join 和 left join 区别 总结: join只会满足所有连表条件的符合的数据; left jion...

网友评论

      本文标题:C#基础二刷

      本文链接:https://www.haomeiwen.com/subject/rasogrtx.html