黑马程序员_C#面向对象总结

------- Windows Phone7手机开发 .Net培训 、期待与您交流! -------
1、面向对象不是取代面向过程的

2、类和对象的关系:
类是抽象概念,而对象是具体的,比如”人类“就是一个类,而”小明“就是对象,是一个真实存在的人。按钮是一个类,某个按钮就是一个对象;string是一个类,”abc“就是一个对象。类不占内存,对象才占内存,类中有一些属性或字段,用于描述对象的特征。

3、方法:
方法就是类能够执行的动作,比如人类就有吃饭方法,说话方法。

4、类的继承
类之间可以有继承关系,子类(派生类)从父类(基类)继承所有的属性、字段和方法,如电脑类可以从电器类继承,这样电器类拥有的属性和方法,比如重量,耗电量,打开,关闭,电脑类都自动继承拥有了,这样电脑类只需定义CPU型号,内存大小等自己独有的方法或属性就可以了。

5、面向对象的3个特性:继承、封装、多态

6、成员的访问级别:
字段、方法、属性都可以叫做类的成员,他们都需要定义访问级别,控制访问级别的作用在于控制成员在哪些地方可以被访问,从而达到面向对象中封装的目的。

几个常见的访问级别:
public: 本命名空间下所有地方都可以访问
private: 只能在本类中被访问
protected: 可以在本类和子类中被访问

internal:只能在本程序集中被访问


7、属性

(1)通常情况下,属性的开头字母大写,而对应字段的开头字母小写。

语法(例):

class Person

{

    private string name;

    public string Name

    {

         get

         {

              return name;

         }

         set

         {

              name=value;

         }

       

}

 

上述代码中,如删除get或set方法,即可成为只写或只读属性,get,set都可以设置访问级别。

(2)

在没有特殊逻辑代码的情况下,上述的代码可简写成public string Name{get;set;}

 

8、构造函数

语法(例):

 

class Person

{

    public Person(string name)

    {

         this.name=name;

    }

    private string name;

    public string Name

    {

         get

         {

         return name;

         }

 

    }

}

(1)构造函数的函数名与类名相同,没有返回值,连void都不需要写,构造函数的作用是强制用户在声明实例的时候传入参数,如上代码中,用户在定义一个新的Person实例时必须输入实例的姓名参数,而由于姓名属性是只读属性,因此在传入参数完成之后,实例的姓名是无法改变的。

(2)在定义类时,即使类中没有构造函数,系统也会自动帮我们生成一个没有参数的构造函数,而当我们自己定义了构造函数之后,这个无参的构造函数就不再存在了。

(3)构造函数可以有重载,如:

class Person

{

    public Person(string name)

    {

         this.name=name;

    }

    public Person(int age)

    {

         this.name=name;

         this.age=age;

    }

    private string name;

    public string Name

    {

         get

         {

         return name;

         }

    }

    private int age;

    public int Age{get;set;}

 

}

如上,Person类有了两个构造函数,即只有一个name参数的构造函数和有两个参数name,age的构造函数,这两个构造函数之间的关系就叫做重载。

 

子类调用父类的构造函数:

1、构造函数不继承,派生类会自动调用基类构造函数。

2、若类内没有定义构造函数,系统会自动隐式生成一个不带参数的构造函数,比如定义一个类:

public class A

{

}

可以理解为它已经存在一个如下的构造函数

public class A

{
    publicA()
    {
      
    }

}


3、派生类构造函数自动调用基类的不带参数的构造函数,注意下面的格式

public class B:A

{
    publicB()
    {
      
    }

}

相当于

public class B:A

{
    publicB():base()
    {
      
    }

}

3、基类中带参数的构造函数必须显式调用,比如:
public class A
{

    publicA(string str)
    {
      
    }

}
public class B:A
{
    publicB(string str):base(str)
    {
      
    }
}

 

4、如果基类中有参数为0个的构造函数,那么派生类中可以不写构造函数,默认调用基类中无参的构造函数

public class A
{
    publicA()
    {
      
    }
    publicA(string str)
    {
      
    }

}
public class B:A
{
   

}

 

 

9、多态:多态就是对象可以表现多个类型的能力

(1)重写父类中的方法:

当子类和父类的方法重名时,会报绿线警告,去掉绿线的方法:

①在子类方法的访问修饰符(public)后加上new

②在父类方法的访问修饰符后加上virtual,即定义为虚方法,在子类中重写这个方法时,在访问修饰符后加上override

在重写虚方法时要注意:

方法不能用static修饰

子类中方法重写时必须与父类中方法的签名(即返回值和参数)一致

virtual不能与private一起使用

 

常见的虚方法:

Equal()

ToString()

GetHashCode()

 

 

(2)抽象类和抽象方法:

①如果在一个类中有一个方法的访问修饰符后加了abstract,那么这个方法就叫做抽象方法,相应的类名前也要加上abstract,这个类就成了抽象类,注意抽象方法没有方法体,抽象类不能被实例化。

②如果一个类继承了抽象类,那么在这个子类中必须重写父类中的抽象方法,实现抽象方法的方法体。

 

 

10、接口

语法:

[访问修饰符] interface 接口名

{

    //接口成员

}

(1)定义:interface关键字,接口中可以有属性、方法(不写方法体)。

(2)接口的名称通常以I开头,如IList

(3)如果一个类继承了其他类同时又实现了接口, 那么父类写在前面,接口写在后面,如:classStudent:Person,IComparable    一个类只能继承自一个类,但可以有多个接口。

(4)接口和类的异同

不同点:

接口不能直接实例化;

接口中不包含方法的实现;

接口可以多继承,类只能单继承;

 

相同点:

接口、类、结构都可以实现多个接口

接口类似于抽象基类,任何继承(实现)接口的非抽象类型都必须实现接口的所有抽象成员

接口和类都可以包含事件,索引器,方法和属性

 

类不支持多重继承,而接口支持。类对接口叫实现,不叫继承,类好比是爹,接口是能力,一个人可以有多种能力但不会有多个爹。

 

 

 

---------------------- ASP.Net+Unity开发 .Net培训 、期待与您交流! ----------------------详细请查看: www.itheima.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值