C#学习--面向对象

析构函数和构造函数

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 面向对象编程
{
    class Person
    {
       /***********构造函数************/
        // 构造函数,函数名和类同名,当用new关键字实例化Person对象时,就会调用这个函数
        // public 公共的,表示这个构造方法是公共的,任何类都可以调用
        //public Person(string a)
        //{
        //    Console.WriteLine(a);
        //}


        // 静态构造函数,只会被执行一次,他是属于类的,不属于那个实例

        /* 静态构造函数特点:
         1.静态构造函数既没有访问修饰符,也没有参数
         2.在创建第一个实例或者引用任何一个静态成员之前,将自动调用静态构造函数来出事化类,也就是无法直接调用静态构造函数,也无法控制什么时候执行
         3.一个类只能有一个静态构造函数,最多只能运行一次
         4.静态构造函数不可以被继承
         5.如果静态构造函数,而类中静态成员有初始值,那么编译器会自动生成默认的静态构造函数。

             */
        static int i = 0;
        static Person()
        {
            i++;

            Console.WriteLine("我被访问了{0}次", i);
        }


        // 私有构造函数
        // private 私有的,访问修饰符,当实例化对象时使用默认构造方法时,编译器就会报错,无法编译通过
        //private Person()
        //{
        //    Console.WriteLine("无参构造函数");

        //}

        /************析构函数***************/
        /*
         1.析构函数没有参数没有返回值,为了与构造函数区别,在前面加上一个符号“~”
         2.一个类智能有一个析构函数,不能重载
         3.如果用户没有编写析构函数,编译系统自动生成一个缺省的析构函数
             */
        ~Person()
        {
            Console.WriteLine("死了");
        }
    }

    class Program
    {
        static void test()
        {
            Person person = new Person();
            //Console.WriteLine(person.GetName());
            Person person2 = new Person();
            person = null;
            person2 = null;

        }


        static void Main(string[] args)
        {

            test();
            Console.ReadKey();
        }
    }
}

 

封装

访问修饰符:

如果没有指定访问修饰符,则默认是private

    • Public
    • Private
    • Protected
    • Internal
    • Protected internal
Public 修饰符

Public 访问修饰符允许一个类将其成员变量和成员函数暴露给其他函数和对象。任何公共成员可以被外部访问

Private 修饰符

Private 访问修饰符允许一个类将其成员变量和成员函数对其他函数和对象进行隐藏。只有同一个类中的函数可以访问他的私有从成员

Protected 修饰符

Protected 修饰符允许子类访问他的基类的成员变量和成员函数。这种方法有助于继承

Internal 修饰符

Internal 修饰符允许一个类将其成员变量和成员函数暴露给当前程序中的其他函数和对象,换句话说,带有访问Internal 修饰符的任何成员可以被定义在改成员所定义的应用程序内的任何类或方法访问

Protected internal 修饰符

Protected internal 修饰符允许一个类将其成员变量和成员航沪深对同一应用程序诶的子类以外的其他类对象和函数进行隐藏

方法

  • 定义
  • 调用
定义
<Access Specifier> <Return Type> <Method Name>(Parameter List)
{
   Method Body
}
调用

使用.语法调用一个类的方法

 

继承

C#不支持多继承,但可以使用接口来实现多继承。用C#创建一个派生类的语法如下:

<acess-specifier> class <base_class>
{
   ...
}
class <derived_class> : <base_class>
{
   ...
}

C#继承实例:

class Rectnangle
    {
        protected double length;
        protected double width;
        public Rectnangle(double l, double w)
        {
            length = l;
            width = w;

            Console.WriteLine("Rectnangle 构造方法{0}{1}",length, width);
        }
    }

    class SubRectangle:Rectnangle
    {
        // base(); 向父类构造函数传递相同的参数
        public SubRectangle(double l, double w) :base(l, w)
        {
            Console.WriteLine("SubRectnangle 构造方法{0}{1}", l, w);
        }
    }

 

多态

1.静态多态性:一个函数在编译时才确定

2.动态多态性:一个函数在运行时才确定

接口

定义:把公共实例方法和属性组合起来,以封装特定功能的一个集合

接口声明:使用关键字interface,接口声明缺省为 public 类型

实例:

 public interface car
    {
        void showName(double a);
        void showAge();
    }

    // 接口实现
    class aodi : car
    {
        public void showName(double a)
        {

        }

        public void showAge()
        {

        }
    }

 

运算符重载

class Rectnangle
    {
        public double length;
        public double width;

       
        public Rectnangle(double l, double w)
        {
            length = l;
            width = w;

            Console.WriteLine("Rectnangle 构造方法{0}{1}",length, width);
        }

       // 重载+号运算符,当两个rectnangle对象相加时,就会执行这里
        public static Rectnangle operator+ (Rectnangle a, Rectnangle b)
        {
            Rectnangle rectnagle = new Rectnangle(10, 20);
            rectnagle.length = a.length + b.length;
            rectnagle.width = a.width + b.width;            
            return rectnagle;

        }
    }

static void main(string[] args){
    Rectnangle rectna1 = new Rectnangle(10, 20);
            Rectnangle rectna2 = new Rectnangle(10, 20);
            // 执行运算符重载
            Rectnangle rectna3 = rectna1 + rectna2;
}

转载于:https://www.cnblogs.com/programTravel/p/5815831.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值