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...