码迷,mamicode.com
首页 > Windows程序 > 详细

c# 对象 & 类

时间:2017-12-12 22:23:28      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:cin   intern   wim   atm   不能被继承   abstract   sea   xpl   log   

类定义中可以使用的访问修饰符组合
  • none or internal 类只能在当前工程中访问
  • public 类可以在任何地方访问
  • abstract or internal abstract 类只能在当前工程中访问,不能实例化,只能继承
  • public abstract 类可以在任何地方访问,不能实例化,只能继承
  • sealed or internal sealed 类只能在当前工程中访问,不能派生,只能实例化
  • public sealed 类可以在任何地方访问,不能派生,只能实例化
 
构造函数
其名称同类名,没有返回值,也不需要void ,在new的时候调用。
所有的类都有构造函数,只不过C#会默认一个无参数的构造函数,如果不定义,则使用默认。
如果定义了构造函数,则默认失效。
 
嵌套类
   C#允许使用类嵌套
     嵌套类型被视为是外层类型的成员,因此嵌套类型可以访问外层类型中的所有其他成员。
     根据类的成员默认访问修饰符为:private的原则,嵌套类默认访问修饰符为private
     嵌套类型可以自由访问外层类型的成员,而不在乎那些成员是否私有。外层类型如果想访问嵌套类型,则要受到访问规则的限制。
     关于嵌套类的继承(后面会详细说明继承),如果一个类型继承了一个包含嵌套类型的类型,那么它也会自然的继承基类型中的嵌套类型,因为那个嵌套类型本身就是基类型的一个成员。因此只要那个嵌套类型不是private或者天生不能被继承的,子类型中新声明的嵌套类型还可以继承那个嵌套类型。
 
析构函数
  • 不能在结构中定义析构函数。 只能对类使用析构函数。
  • 一个类只能有一个析构函数。
  • 无法继承或重载析构函数。
  • 无法调用析构函数。 它们是被自动调用的。
  • 析构函数既没有修饰符,也没有参数。
一. 析构函数的特征:
析构函数只能存在于类中,而不能存在于结构中;析构函数不能有任何修饰符,包括访问控制修饰符,静态修饰符,抽象修饰符,虚拟修饰符等都不能有;析构函数没有参数,这就意味着不能有任何重载。
二. 析构函数的调用时机:
析构函数会在对象被垃圾收集器回收时调用,但垃圾收集器有个特点,它是懒惰的, 它并不会在变量出了作用域和生命期后立即回收,而是在它认为适当的时候才回收,一般是内存紧张的时候。
 
例子:
class Car { ~Car() // destructor { // cleanup statements... } }
 
对象的消亡
对象超出作用范围 消亡
对象 引用手动赋值 null 消亡
 
类的继承
继承是面向对象编程的一个重要特性。任何类都可以从另一个类中继承,这就是说,这个类拥有它继承的类的所有成员。在OOP 中,被继承的类称为父类(也称为基类)。注意,C#中的对象仅能直接派生于一个基类,当然基类也可以有自己的基类。
类的继承一个重要作用是子类可重用父类的代码。这样就可以在一个地方集中维护一份代码,避免了很多的重复的代码。
c#只支持单继承
 
继承语法 :
class ModelACar : Car
重构
比如现在我有两个类,一个是Cat,另一个是Dog,他们都有叫方法,如果我每个类都去写实现叫方法,就造成了代码的重复,怎么办那,可以把叫方法抽象出来,放到一个父类Animal中,让子类Cat、Dog去继承
 
【重写】
       多出现在多态里,父类里写一个virtual方法或abstract方法,子类通过override重写去实现父类的方法
  • 1.重写父类的方法要用到override关键字(具有override关键字修饰的方法是对父类中同名方法的新实现)
  •      2.要重写父类的方法,前提是父类中该要被重写的方法必须声明为virtual或者是abstract类型。给父类中要被重写的方法添加virtual关键字表示可以在子类中重写它的实现。(注意:C#中的方法默认并不是 virtual类型的,因此要添加virtual关键字才能够被重写)
  • 3.virtual关键字用于将方法定义为支持多态,有virtual关键字修饰的方法称为“虚拟方法”
class Animal {
public virtual void GetShoutSound() { }
}
class Cat:Animal {
public override void GetShoutSound() {
Console.WriteLine("猫的叫声为:喵");
}
}
class Dog : Animal {
public override void GetShoutSound() {
Console.WriteLine("狗的叫声为:");
}
}

  

 
 
 
 
 
 
 
 
 

c# 对象 & 类

标签:cin   intern   wim   atm   不能被继承   abstract   sea   xpl   log   

原文地址:http://www.cnblogs.com/gwyy/p/8028879.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!