• C#面向对象 (访问修饰符、封装、继承、多态)


    先看一下创建一个新项目时的基本格式

    using System;                                  
    using System.Collections.Generic;        
    using System.Linq;                           //引用的命名空间
    using System.Text;       
    namespace ConsoleApplication1             //命名空间 (程序集) ConsoleApplication1 为命名空间名称
    {
         class Program                   //类 , Program 是类名          
         {
                static void Main(string[] args)    //函数
               {
               }
          }
    }

    1、命名空间

      一个解决方案下可以有多个项目,每个目就是一个命名空间(程序集),在每个项目下面添加的文件引用不同命名空间下的类时,将命名空间名称添加到主页的引用命名空间里

    namespace ConsoleApplication1.wahaha //命名空间
     
    using ConsoleApplication1.wahaha;//引用命名空间是的格式

      2、类

       一个命名空间下可建多个类,一个类文件一般放一个类,可对类进行封装   

      class Program   //program 类 是程序的主入口,各程序模块的汇总  

     

    3、访问修饰符  

       位于“类”名前方

    public    // 公共的      -- 访问权限是最高的
    
    private   //私有的       -- 只能在类的内部进行访问
    
    internal   //默认的       -- 当前命名空间(程序集)下可以访问
    
    protected   //被保护的     -- 当前类及它的派生类中可以访问

    4、封装

      对成员变量进行封装 

     定义类 ——成员变量——属性 

    class  类名 
    {
         private 数据类型 _名称;    //成员变量,字段  --是私有的
    
          public 数据类型 名称      //属性
          { 
                 get{ return  _名称; }
    
                 set{ _名称 = value; }   
           } 
     }

    使用类,在min函数中引用 (实例化对象)

      类名   对象  =  new   类名();

    student a = new student( );

    例1、 对成员变量的封装

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        class Student
        {
            private string _Code; //成员变量
    
            public string Code
            {
                get { return _Code; }
                set { _Code = value; }
            }
    
            private string _Name;
    
            public string Name
            {
                get { return _Name; }
                set
                {
                    if (value == "")
                        _Name = "<暂无>";
                    else
                        _Name = value;
                }
            }
    
            private DateTime _Birthday;
    
            public DateTime Birthday
            {
                get { return _Birthday; }
                set { _Birthday = value; }
            }
    
            public int Age
            {
                get
                {
                    int end = 0;
    
                    end = DateTime.Now.Year - _Birthday.Year;
    
                    return end;
                }
            }
    
            private decimal _Score;
    
            public decimal Score
            {
                get { return _Score; }
                set
                {
                    if (value > 100 || value < 0)
                        _Score = 0;
                    else
                        _Score = value;
                }
            }
    
        }
    }
    View Code

       // 属性的类型与字段的类型可以不同

       // get  set  根据需要可以只有一个

    例2、对方法封装

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        public class Math1
        {
            public int JiaFa(int a, int b)
            {
                return a + b;
            }
        }
    }
    ————————————————————-----
    ——对方法的引用
       Math1    m   =   new    Math1 ( );
    
        m.JiaFa( 10,20 );
    View Code

    5、继承

        子类:父类 (子类继承父类)

      父类 (基类),子类 (派生类 超类)

      一个子类只能有一个父类,子类可以继承全部父类中的public的方法和属性

    案例 

    namespace ConsoleApplication3
    {
        public class Fly
        {
            public virtual string Flying()
            {
                return "我会飞!";              —— 父类
            }
        }
    }
    ——————————————————
    
    namespace ConsoleApplication3
    {
        public class Bird : Fly
        {                                         ——子类
    
        }
    }
    View Code

    6、多态

      类的多种形态

    有了继承才有了多态

    virtual   //虚方法        -- 写在访问修饰符之后(成员变量中),
    
    override  // 重写函数体    -- 可以被子类进行重写,只能重写函数体

    案例 

    namespace ConsoleApplication3
    {
        public class Fly
        {
            public virtual string Flying()
            {
                return "我会飞!";
            }
    
        }
    }
    ————————————————
    namespace ConsoleApplication3
    {
        public class feiji : Fly
        {
            public override string Flying()
            {
                return "屁股喷火就能飞!";
            }
    
        }
    }
    View Code
  • 相关阅读:
    TCP 窗口缩放、时间戳和 SACK
    对微前端的11个错误认识
    终于解决了使用Python装饰器的一个痛点
    go使用mongo
    获取鼠标当前元素
    console控制台屏蔽console
    httpx使用HTTP/2
    go解析未知结构的json
    python字典转对象
    .::Best Musica Paradisa::.
  • 原文地址:https://www.cnblogs.com/Tanghongchang/p/6715358.html
Copyright © 2020-2023  润新知