zoukankan      html  css  js  c++  java
  • c# 对象 & 类

    类定义中可以使用的访问修饰符组合
    • 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("狗的叫声为:");
    }
    }
    

      

     
     
     
     
     
     
     
     
     

  • 相关阅读:
    MQ(二):ActiveMQ基础概念以及案例
    MQ(一):消息中间件开篇
    Nginx(三):Nginx基本概念以及用法
    Nginx(二):Nginx基本安装
    Nginx(一):Nginx初识
    配置中心(十)Config:环境搭建
    声明式服务调用(Feign)九:环境搭建
    服务监控(Hystrix Dashboard、Turbine)八:环境搭建
    服务保护机制(Hystrix)七:环境搭建
    客户端负载均衡(Ribbon)六:环境搭建
  • 原文地址:https://www.cnblogs.com/gwyy/p/8028879.html
Copyright © 2011-2022 走看看