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
原文地址:https://www.cnblogs.com/Tanghongchang/p/6715358.html