C#学习

周飞飞的C#学习笔记 #Day 2

Posted on 2021-02-28,6 min read

Here We Go!👏👏👏

虽然说是Day 2,但其实是Day 2和Day 3两天的内容 - -

今日重点

1.C#字符串

  • 使用String类的方法函数构造字符串
  • String类的属性
  • String类的方法
  • DateTime类的使用

C#结构体

  • 声明方式与C/C++类似
  • C#结构与C/C++不同之处(特点),可细看菜鸟教程下方的笔记

C#枚举

  • 使用enum关键字

C#类

  • 静态变量的概念与使用:关键字 static 意味着类中只有一个该成员的实例。(一定要深刻理解静态对象,否则可能以后会在此处出现很多错误
  • 静态变量可放在构造函数中,用于对构造出的实例进行计数
  • 静态变量可以直接在类外调用,而不需要创造实例

C#继承

  • C#多重继承
  • 在声明子类的构造函数时,可以通过base来显示调用父类的构造函数,否则就是隐式调用

C#多态性

  • 静态多态性:
    • 函数重载:对于同名函数,设置不同的参数类型或个数
    • 运算符重载:过关键字 operator 后跟运算符的符号来定义
      • C#不能重载‘=’运算符
  • 动态多态性:由抽象类和虚方法实现,使用abstract创建抽象类,使用virtual创建虚方法,需要使用override(重写)进行实现。
    • 虚方法:基类中定义的允许在派生类中重写的方法,使用 virtual 关键字定义。
    • 抽象方法:在基类中定义的并且必须在派生类中重写的方法,使用 abstract 关键字定义。
  • 注意区分重写和重载
    • 重载(overload): 在同一个作用域(一般指一个类)的两个或多个方法函数名相同,参数列表不同的方法叫做重载,它们有三个特点(俗称两必须一可以):1.方法名必须相同; 2.参数列表必须不相同; 3.返回值类型可以不相同。
    • 重写(override):重写(override):子类中为满足自己的需要来重复定义某个方法的不同实现,需要用 override 关键字,被重写的方法必须是虚方法,用的是 virtual 关键字。它的特点是(三个相同):1.相同的方法名;2.相同的参数列表;3.相同的返回值。

今日练习

戳我展开 using System;
namespace StudyDay2
{
    struct Books
    {
        public int id;          //结构不能在声明时进行初始化
        public string name;
        public void Display()   //C#中的结构体中可以声明方法函数
        {
            Console.WriteLine("name:{0} id:{1}", name, id);
        }
    };

    enum E{one,two,three};      //枚举的是标识符列表,所以不用再添加引号

    class StringTest
    {
        public string s1 = "Sherlock";
        public string s2 = "Zhou";
        static string[] sarray = { "hello", "world", "!" };  
        public string s3 = String.Join(" ", sarray);//连接一个字符串数组中的所有元素,使用指定的分隔符分隔每个元素。
        static char[] carray = { 'H', 'e', 'l', 'l', 'o' };
        public string s4 = new string(carray);      //使用string的构造函数将字符数组构成字符串
                                                    //似乎初始化要求字符数组必须是静态的?
        static DateTime t = DateTime.Now;           //DateTime的使用可以去看看
        public string s5 = String.Format("Today is {0:D},and current time is {0:t}",t); //注意要求英文冒号!
    }

    abstract class Shape
    {
        public abstract int Area();            //注意访问标识符,abstract,和类型标识符的顺序
        //注意如果使用了抽象类,那么就不能在抽象类内部对抽象方法进行声明
    
    }

    class Rectangle:Shape                       //继承Shape,注意继承了抽象类后,抽象方法必须进行实现
    {
        public int length;
        public int width;
        public Rectangle()
        {}
        public Rectangle(int l,int w)
        {
            length = l;width = w;
        }
        override public int Area()              //注意添加override关键字
        {
            return length * width;
        }

        public static Rectangle operator+(Rectangle r1,Rectangle r2) //注意必须有static关键字
        {
            Rectangle r3 = new Rectangle();
            r3.length = r1.length + r2.length;
            r3.width = r1.width + r2.width;
            return r3;
        }
    }

    class MainFun
    {
        static void Main(string[] args)
        {
            StringTest s = new StringTest();
            //Console.WriteLine(s.s1 + " " + s.s2);
            //Console.WriteLine(s.s3);
            //Console.WriteLine(s.s4);
            //Console.WriteLine(s.s5);
            //Console.WriteLine(s.s5.Contains("2021").ToString());
            //Books book1;
            //book1.name = "233";
            //book1.id = 233;
            //book1.Display();
            //Console.WriteLine(E.one);            //注意枚举的使用方式
            //Console.WriteLine((int)E.one);       //第一个枚举符号的值是0
            //Rectangle r = new Rectangle(2, 1);
            //Console.WriteLine("Area:{0}", r.Area());
            Rectangle r1 = new Rectangle(2, 1);
            Rectangle r2 = new Rectangle(4, 2);
            Rectangle r3 = new Rectangle();
            r3 = r1 + r2;
            Console.WriteLine("length:{0},width:{1},area:{2}", r3.length, r3.width, r3.Area());

            Console.ReadKey();
        }
    }

}

今日总结

srds,是两天的总结啦,加上第一天的C#学习,我算是用3天的时间对C#语言进行了基础的了解,再结合我本身拥有的其他语言的编程经验,应该算是C#入门了吧(大概)。这两天主要难点还是在后面的多态性以及C#与C/C++不同的一些地方上。
总之C#的学习就先告一段落,接下来的主要目标是进行Unity的学习,现在说实话Unity了解尚浅,我觉得接下来的步骤应该会是先基本熟悉Unity的界面,然后再慢慢学习Unity的API,当然这只是暂时的猜想啦。或许照着B站老师的课程一步一步慢慢来也不错。
总之继续努力吧!(PS:这两天花了大把的时间在网站的配置上,不过最后总算是建出了能够流畅运行的网站啦,就是在自定义域名上还有一丢丢问题,心累🤔)

冲鸭!🦆


下一篇: 论文研读的初尝试🤷‍♂→

loading...