C#面向对象入门知识

C#面向对象入门

因为之前有过Java基础,这里通过网课简单的学习一下C#,并简单的记录了一下两者的异同。


###继承
例如:public class A:B,与java不同的是用:而不是extends.
例如:public class A:B,与java不同的是用:而不是extends.
隐藏方法
如果继承了方法和属性,需要修改,那就可以使用new来重写,比如:new public void speak(){}
虚方法和多态
虚方法是指virtual,虚方法在基类中可以不被override,并且如果用父类的引用基类实例化也叫向上转型,Pet a =new Dog();则a会用虚方法,而不用override的方法,如果不用父类的引用则用重写的方法。
构造函数
一定会调用基类的构造函数,所以把一些基础共用的命名信息直接交给基类的构造函数。
抽象方法和抽象类
abstract方法与类,不能实例化,且方法内不能写内容,但与virtual有相似之处是,也要override重写,这样就确保派生类需要重写方法。
密闭类与密闭方法
密闭类:不能有派生类,密闭方法:不能重写该方法(例如String),
例如 sealed override public void Speak(){}
接口
interface,指定一组函数的引用类型,

Cat c =new Cat();
ICatchMice ic =(ICatchMice)c;
c.CatchMice();
ic.CatchMice;

一个类可以实现多个接口,必须完成继承接口的方法。

Cat:Pet,ICatchMice,ICatchTree //基类(),接口,接口

结构和类
结构存储于栈,不支持继承但可实现借口,适用于小型数据结构。
###静态成员与静态类
静态成员
与Java静态成员类似。访问方式:直接通过类名访问:Dog.Num =1;,与类有关,可以没有实例。
静态函数成员:同静态成员可以直接调用,不需要实例,
静态构造函数:可以使用静态成员。例如:static Dog(){Num =0;}
静态类
如果类只包含了静态的方法和属性,并且表示为static,
静态类不能创建实例,不能被继承;
主要用于基础类库(如数学库Math类)和扩展方法,扩展方法所属的类,必须是static类,扩展方法的第一个参数类型,必须是this+类名。例如:

static class FeedGuide{
    static public void HowToFeedDog(this Dog)
    {
    Console.WriteLine("a video start");
    }
}

###重载操作符
装箱与拆箱
装箱本质:在堆上创建了引用类型的副本,新创建的引用类型和原来的值类型相互独立。

int i=3;
objct a =null;
a=i;

拆箱:将装箱后的对象转换回值类型的过程,是一种显示转换。

int j =(int)oi;

自定义转换
隐式转换:

public static implicit operator Dog(Cat cat){
    return new Cat(dog._name);
}
//
Dog dog = new Dog("jack");
Cat cat =dog;

显式转换:

public static explict operator Dog(Cat cat){
    return new Dog(cat._name);
}
//
Dog dog2 =(Dog)cat;

重载运算符
定义:利用现有的(不能创造新的运算符)某种运算符,针对自定义(预定义类型和现有运算符的运算含义是确定的)类或者结构,定义某种运算操作。
目的:利用现有运算符,简化自定义类型的操作。最好是,该运算符和该操作,具有一定以相关性。

public static Dog operator +(Dog male,Dog female){
//
return new Dog();
}

C#面向对象入门知识
例如:

public static Pet operator ++(Pet pet)
{
++pet._age;
return pet;
}
//
Pet[] pets =new Pet[]{new Dog("Jack")};
pets[0]++;
//此时pets[0]++,中的++用的是自己定义的重载操作福年龄加1。