- 经过第一天,基础语法的学习(回忆算法跟表达式还有基本数组的概念)
- 第二天对类跟封装的学习,虽然原理不是很懂,但是总体来说,学到了蛮多。
- 那么第三天就是对面向对象部分的学习了,经过这一部分之后,我对很多java代码以及c#代码都能看得懂了,不过自己还是要找几个项目好好的写一下,以下写一下第三天的知识总结。
首先是第一个概念,继承。
1.1,继承. 可以让子类直接继承父类的字段,属性,方法(前提是不是私有的)
作为基类,我们尽可能把东西放在基类,这样子让子类有更大的扩展性。
//依赖倒置原则,尽可能的依赖抽象类
1.2,子类为了隐藏父类的方法,应该定义一个同名的方法来覆盖
new public void PrintName();
1.3.虚方法与多态,用virtual(不能带有函数)的基类的虚方法,
然后继承他的子类可以用override来进行重写跟之前的重载是不同的。
用这种方法来实现多态?
virtual public void speak();
//下面是子类
override public void speak();
1.4.那么还有一种是,抽象方法,用的是abstract,里面有方法跟属性,但是,不能自己实现
//这里与虚方法的不同就很明显,虚方法本身就是可以实现的,抽象方法需要在子类中才能实现。
abstract class Pet
{
public Pet(string name)
{
Name = name;
}
protected string Name;
abstract public void printName();
}
class Dog : Pet
public Dog(string name):base(name)
override public void printName()
{
Console.WriteLine("我是" + Name);
// Console.ReadLine();
}
1.5.密闭类,用sealed,密闭类是不希望被人通过继承来修改
而密闭方法是不需要被人重写这个方法
二,接口(interface)
指定一组函数成员,而不实现他们的引用的类型
//不过接口中的方法默认就是public,但也不可以加public。
而且,接口中的子类必须全部实现?
2.1 结构和类
结构是在栈中存储的,是值类型,优点是【分配快,不需要gc?】【可以用ref提高效率】
类是在堆中存储的,是引用类型。
2.2 静态类,静态成员,static
这意味着他们将被所有的实例共享,而且他也有自己的静态构造函数。
2.3装箱,拆箱
装箱 指的是值类型转化成引用类型
本质上是在堆中创建了一个引用类型的副本,
int i=3;
object oi = null;
oi = i;
拆箱则是反过来
int i =3;
object oi =i;
int j =(int)oi;
2.4自定义转换
隐式转换是implicit
显式转换是operator
2.5重载运算符