• 非计算机专业的码农C#学习笔记 七、


    结构和类

    (一)结构-通常用于较小的数据类型,大多数情况下都是用类,可用于特定数学公式返回值这类

    Public struct 结构名{}

    1. 结构是值的类型
    2. 传递结构一般传值方式进行,不是用using进行,class则是用Using来进行引用
    3. 结构声明构造函数时候必须带参数
    4. 一个结构不能被另一个结构继承,因为都是具体的值,值不能继承值
    5. 结构可以实现接口
    6. 结构里面不能实例化其他东西
    7. 实例化结构不需要用new来修饰,如public struct st{string a=””;}引用的时候str ss;ss.a=123就可以

    (二)类class

    1.OOP object oriented programming面向对象编程三大特点:

    (1)封装——集合属性和方法,使用的时候引用其某个属性和方法就可以,不显示出类具体结构

    (2)继承——派生类:基类,继承基类的公开属性、字段、方法

    (3)多态——基类含有多个派生类,通过向基类提供基类的参数,由基类分配引用派生类内方法叫做多态;

    2.类的声明:修饰词 class 类名{公有变量;方法;…}

    3.构造函数和.析构函数:一般对象的生命周期都是构造函数开始和析构函数结束;构造函数是特殊的函数,public 函数名{};然后在main()中调用,实例化,实例.参数和方法,就可以;析构函数实际上等于“~构造函数名”,main中调用构造函数,或者实例化构造函数,最后都会自动被调用.

    4.类实例化:对象是数据行为和标识的集合,不同于类,类的实例化创建一个该对象所属类的实例

                必须对类进行实例化才能引用类中的方法和变量或者字段

    (三)类的面向对象特性

    1.封装:class myclass{private int x;private int y; public int X{get{return x;}set{x=value;}}}….

    2.继承:p[ublic class1class0{} 派生类:基类,“:”表示继承,基类中private定义的字段属性和方法可以被派生类继承,直接用不需要“class0.参数方法等”

    3.类的多态:通过基类的变量引用基类,基类自动分配到派生类,从而实际引用了派生类的具体方法,搞个例子看看:

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

    namespace 对象和类

    {

        #region 这里是类的多态实验

        class class0

        {

            private int x = 0;

            private int y = 0;

            public int X

            { get { return x; } set { x = value; } }

            public int Y

            { get { return y; } set { y = value; } }

            public virtual int add()

            { return X + Y; }

        }

        class class1 : class0

        {

            public override int add()

            {

                //return base.add();

                int x = 15;

                int y = 7;

                return x + y;

            }

    //public new int add() { int x = 5; int y = 5; return x * y; }//除了重写来实现虚方法,还能新增来实现

        }

        #endregion 这里是多态的实验,包含下面mian

        class Program

        {

            static void Main(string[] args)

            {

                class1 cl1 = new class1();

                class0 cl0 = (class0)cl1;

                //cl1.X = 4;//无关

                //cl1.Y = 5;

                Console.WriteLine(cl0.add());

                Console.WriteLine(cl1.add());

        }

    }

     

     

  • 相关阅读:
    无锁队列的实现
    C/C++语言中闭包的探究及比较
    Linus:利用二级指针删除单向链表
    Unix考古记:一个“遗失”的shell
    “C++的数组不支持多态”?
    Alan Cox:单向链表中prev指针的妙用
    二叉树迭代器算法
    C语言全局变量那些事儿
    数据即代码:元驱动编程
    C++模板”>>”编译问题与词法消歧设计
  • 原文地址:https://www.cnblogs.com/mrrxu/p/4007449.html
Copyright © 2020-2023  润新知