八、C#入门基础08(封装,继承,多态)

一、封装

C#中可使用类来达到数据封装的效果,这样可以使数据与方法封装成单一元素,以便于通过方法存取数据。除此之外,还可以控制数据的存取方式。
在面向对象编程中,大多数都是以类作为数据封装的基本单位。类将数据和操作数据的方法结合成一个单位。设计类时,不希望直接存取类中的数据,而是希望通过方法来存取数据。这样就可以达到封装数据的目的,方便以后的维护升级,也可以在操作数据时多一层判断。
此外,封装还可以解决数据存取的权限问题,可以使用封装将数据隐藏起来,形成一个封闭的空间,然后可以设置哪些数据只能在这个空间中使用,哪些数据可以在空间外部使用。一个类中包含敏感数据,有些人可以访问,有些人不能访问,如果不对这些数据的访问加以限制,后果将会非常严重。所以要对类的成员使用不同的访问修饰符,从而定义他们的访问级别。

封装语法:
Public 数据类型 变量名
{
get
{
return 变量名;
}
set
{
变量名=value;
}
}

二、继承

继承是面向对象最重要的特性之一。任何类都可以从另外一个类继承,这就是说,这个类拥有它继承类的所有成员。在面向对象编程中,被继承的类称为父类或基类。C#中提供了类的继承机制,但只支持单继承,而不支持多继承,即在C#一次只允许继承一个类,不能同时继承多个类。

继承语法:
Public class 类名:父类名

如何使用父类里面的成员变量,方法,构造函数?
关键字:base

成员变量:
base.成员变量名
方法:
base.方法名

三、多态

多态性意味着有多重形式。
在面向对象编程范式中,多态性往往表现为"一个接口,多个功能"。
多态性可以是静态的或动态的。
在静态多态性中,函数的响应是在编译时发生的。
在动态多态性中,函数的响应是在运行时发生的。

1.静态多态性
在编译时,函数和对象的连接机制被称为早期绑定,也被称为静态绑定。C# 提供了两种技术来实现静态多态性。
分别为:
1.1方法重载:
可以在同一个范围内对相同的方法名有多个定义。
方法的定义必须彼此不同,可以是参数列表中的参数类型不 同,也可以是参数个数不同。
不能重载只有返回类型不同的方法声明。

2.动态多态性
当有一个定义在类中的函数需要在继承类中实现时,可以使用虚方法。
2.1:虚方法是使用关键字 virtual 声明的。
2.2:虚方法可以在不同的继承类中有不同的实现。
2.3:对虚方法的调用是在运行时发生的。
2.4:动态多态性是通过抽象类和虚方法实现的。

定义虚方法:
访问修饰符 virtual 返回的数据类型/void 方法名()
{
//执行代码,也可以完全不写
}
重写父类的方法(子类中):
访问修饰符 override 返回的数据类型/void 方法名()
{
//执行代码
}

四、代码:

1.Dog类

using System;//参考资料在QQ群:683782676
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _08
{
    public class Dog
    {
        private string _name;
        private int _age;
        private string _sex;  

        //propfull 再双击tab生成如下代码:
        /*
        private int myVar;

        public int MyProperty
        {
            get { return myVar; }
            set { myVar = value; }
        }*/




        public int Age
        {
            get { return _age; }
            set
            {
                if (value>0&&value<17)
                {
                    _age = value;
                }
                else
                {
                    _age = 0;
                }
            }
        }

        public string Name
        {
            get
            {
                return _name;
            }

            set
            {
                _name = value;
            }
        }

        public int Age1
        {
            get
            {
                return _age;
            }

            set
            {
                _age = value;
            }
        }

        public string Sex
        {
            get
            {
                return _sex;
            }

            set
            {
                _sex = value;
            }
        }

        public int GetAge() {
            return _age;
        }

        public void SetAge(int age) {
            if (age > 0 && age < 17)
            {
                _age = age;
            }
            else {
                _age = 0;
            }
        }


    }
}

2.父类:Student(MinStudent和MaxStudent的父类)

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

namespace _08
{
    public class Student
    {
        private string _name;
        private int _age;
        private char _sex;

        public Student() { }

        public Student(string _name, int _age, char _sex)
        {
            this._name = _name;
            this._age = _age;
            this._sex = _sex;
        }

        public string Name
        {
            get
            {
                return _name;
            }

            set
            {
                _name = value;
            }
        }

        public int Age
        {
            get
            {
                return _age;
            }

            set
            {
                _age = value;
            }
        }

        public char Sex
        {
            get
            {
                return _sex;
            }

            set
            {
                _sex = value;
            }
        }

        public string GetMe(){
            return string.Format("姓名:{0},性别:{1},年龄:{2}", this.Name, this.Sex, this.Age);
        }

        //只定义而不实现的方法 我们叫做虚方法 虚方法也可以有方法体({中间的实现代码})
        public virtual void ShowMe() {

        }


    }
}

3.子类:MinStudent(父类是Student)

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

namespace _08
{
    //小学生
    public class MinStudent:Student
    {
        private string _class;

        public MinStudent() { }

        //base 基础
        public MinStudent(string _class, string _name, int _age, char _sex):base(_name,_age,_sex)
        {
            this._class = _class;
        }

        public string Class
        {
            get
            {
                return _class;
            }

            set
            {
                _class = value;
            }
        }

        //public void ShowMe() {
        //    string str=base.GetMe();
        //    Console.WriteLine("{0},年级:{1}",str,this.Class);
        //    Console.ReadKey();
        //}

        public override void ShowMe()
        {
            string str = base.GetMe();
            Console.WriteLine("{0},年级:{1}",str,this.Class);
            Console.ReadKey();
        }





    }
}

4.子类:MaxStudent(父类是Student)

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

namespace _08
{
    //大学生
    public class MaxStudent:Student
    {
        private string _department;

        public MaxStudent() { }

        public MaxStudent(string _department, string _name, int _age, char _sex) :base(_name, _age, _sex)
        {
            this._department = _department;
        }

        public string Department
        {
            get
            {
                return _department;
            }

            set
            {
                _department = value;
            }
        }

        //public void ShowMe()
        //{
        //    string str = base.GetMe();
        //    Console.WriteLine("{0},系:{1}", str, this.Department);
        //    Console.ReadKey();
        //}
//参考资料在QQ群:683782676
        public override void ShowMe()
        {
           string str = base.GetMe();
           Console.WriteLine("{0},系:{1}", str, this.Department);
           Console.ReadKey();
        }


    }
}

你可能感兴趣的:(C#入门基础,asp.net,asp.netmvc)