三、对象和类(1)

一、类的成员:类中的数据和函数统称类的成员

     1、字段 属性 方法 构造函数 析构函数 终结器 运算符 索引器

    class Customer
    {
        private int name;                 //1字段
        private int _sex;
        public int set                       //2属性
        {
            get { return _sex; }
            set { _sex = value; }
        }
        public Customer(int name)//3构造函数:与类同名 没有返回值 可以带参数
        {
            this.name = name;
        }
        ~Customer()                      //3析构函数或终结器:1加~ 2主要用于非托管资源垃圾回收 
        {
        }
        public void Add(int count)  //4方法
        {
            count++;
        }
    }

   2、 字段和属性的区别

      Effective C# 原则1:尽可能的使用属性(property),而不是数据成员(field)。

      把所有的字段都设为私有字段,如果要暴露它们,则把它们封装成属性。这也是微软推荐的方式。具体的好处此处不赘述。 属性的实质是方法(get和set方法),IL中没有属性的概念。因此,使用属性必然会带来性能的降低。
  3、方法重载和重写
      重载:C#不支持可选参数,但可以用重载来实现此目的            
              重载发生在同一个类中;重载主要是针对同一个类中方法名相同但参数(必须的)不同或返回类型(不是必须的)不同的情况。
      重写:申明Virtual 虚方法 override隐式
              重写发生在有继承关系的类之间 父类声明(Virtual 虚方法 )重写发生在派生类上,通过override关键字来改写从其父类继承过来的具有相同返回值,方法名称和参数列表的方法
二、类和结构的区别
    2、结构

           struct  persion

           {

                 public int height;

                 priavte int  age;
           }

   类是存储在托管堆(Heap)的引用类型,结构是存储在堆栈上(Stack)上的值类型

   类是可以继承,而结构是不可以,唯一例外结构派生于Object类

三、C#访问修饰符

在C#中有关的访问修饰符主要有以下5种:private(私有的),protected(受保护的),internal (程序集内部的),public(公开的)以及protectde internal(只有本程序内或者继承于该类的类型可以访问)。

      使用访问修饰符修饰的对象有:namespace(命名空间),class(类),struct(结构),enum(枚举),interface(接口),delegate(委托)以及他们的成员等等。下面进行逐一阐释。

      1.namespace:         隐式具有public类别,不能为其显式添加任何访问修饰符。但作为namespace的成员职能具有public或者internal访问级别。

      2.枚举成员:            同命名空间一样,只具有public访问级别,且不能枚举成员添加访问修饰符。

      3.struct和class:       当仅包含在namespace中时,默认是internal级别,可以显示为其添加public,internal;  当被包含在一个类的内部的时候,可以是protected或者private修饰符。

      4.delegate:             默认具有internal级别

      5.interface:           与类不同,接口默认具有internal级别。接口也可声明为public或internal。      

      6.类的成员:            可以具有5种访问级别。默认为private.

      7.结构的成员:         可以是public,private,internal访问级别。默认是private,因为结构是隐式封闭的。由于结构不具有继承关系,所以不能用protected或者protected internal去修饰结构成员。

      8.接口的成员:         同枚举成员一样,具有public级别,但是不能为其显式添加public关键字。

四、Object 类

●  ToString()方法:是快速获取对象的字符串表示的一种便捷方式。当只需要快速获取对象的内容,用于调试时就可以使用这个方法。在数据的格式化方面,它提供的选择非常少:例如,日期在原则上可以表示为许多不同的格式,但DateTime.ToString()没有在这方面提供任何选择。如果需要更专业的字符串表示,例如考虑用户的格式化配置或文化(区域),就应实现IFormattable接口

●       GetHashTable()方法:如果对象放在名为映射(也称为散列表或字典)的数据结构中,就可以使用这个方法。处理这些结构的类使用该方法确定把对象放在结构的什么地方。如果希望把类用作字典的一个键,就需要重写GetHashTable()方法。

●       Equals()(两个版本)和ReferenceEquals()方法:如果把3个用于比较对象相等性的不同方法组合起来,就说明.NET Framework在比较相等性方面有相当复杂的模式。这3个方法和比较运算符==在使用方式上有微妙的区别。而且,在重写带一个参数的虚拟Equals()方法时也有一些限制,如果选择这么做,就是因为System.Collections命名空间中的一些基类要调用该方法,并希望它以特定的方式执行。

●       Finalize()方法:第7章将介绍这个方法,它最接近C++风格的析构函数,在引用对象被回收调用,以清理资源时。Finalize()方法的Object执行代码实际上什么也没有做,因而被垃圾收集器忽略。如果对象拥有对未托管资源的引用,则在该对象被删除时,就需要删除这些引用,此时一般要重写Finalize()。垃圾收集器不能直接重写该方法,因为它只负责托管的资源,只能使用用户提供的Finalize()。

●       GetType()方法:这个方法返回从System.Type派生的类的一个实例。这个对象可以提供对象所属类的更多信息,包括基本类型、方法、属性等。System.Type还提供了.NET反射技术的入口。

●       MemberwiseClone()方法:这是System.Object中惟一没有在本书的其他地方详细论述的方法。不需要讨论这个方法,因为它在概念上相当简单,只是复制对象,返回一个对副本的引用(对于值类型,就是一个装箱的引用)。注意,得到的副本是一个简单复制,即它复制了类中的所有值类型。如果类包含内嵌的引用,就只复制引用,而不复制引用的对象。这个方法是受保护的,所以不能用于复制外部的对象。该方法不是虚拟的,所以不能重写它的实现。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值