- 所有的类都派生自Object类,可以把派生类(Derived Class)直接赋值给基类(Base Class),基类赋值给派生类的时候需要进行显示转换 sunclass = (sunclass) fathertemp。
- o is xxclass o as xxclass 这两个都不会报错,第一个返回boolean,第二个如果成功返回xx类,如果不成功返回null。
- 实际操作中如果要进行类型转换,xxclass e = o as xxclass if(e!=null){} 会比 if(o is xxclass){ xxlclass e = (xxclass) o }这种写法更友好。后面这种会进行两次判断。(会遍历整个继承层次结构)
- InvalidCastException是类型转化出错的一种。类型转化可能会在编译报错,也可能正常编译在执行过程中报错
- 如果转换后的类直接和函数需要的类不符(即不是当前类,也不是其子类,会在编译的时候直接报错)
- 直接给子类赋值父类的对象,会直接在编译的时候报错
- 子类是通过显示转换变来的父类来赋值的,这时候编译能过,但是执行的时候函数里面可能有具体某个类能用的func,可能会运行时报错。
- c#里面$的作用类似于string.format,使用$就可以在原本填写参数占位符的位置来直接写具体参数。
- string ans = string.Format("My name is {0}", "ada"); 等价于 string ans = $"My name is {"ada"}" 最后结果是My name is ada. 也可以使用name来代替ada(指赋值了name=“ada”以后,string ans = string.Format("My name is {name}) ),不需要双引号。最终输出结果是没有{}的,它是用来控制是否是参数的
- 如果你不想在里层用双引号,又想使用字符串常量,可以 string ans = $"My name is {{ada}}" 结果My name is {ada},一层大括号只能用变量或者带引号常量,两层默认是字符常量。
- 可以使用转义符\n这类的 string ans="My name is aaa.\n I am a girl.",直接用就行。
时间才能证明一切,选好了就尽力去做吧!