面向对象 封装、继承

一、封装

目的保护类,让类更加安全。
做法:让类里面的成员变量变为私有(即访问修饰符)的,做相应的方法或者属性去间接的操作成员变量

※访问修饰符
private 私有的              只能在该类中访问
protected 受保护的       只能在该类和它的子类中访问
public 公有的                在任何地方都可以访问

封装成员方法来间接操作类里面的成员变量

 

例:

 class Ren
    {
        private string name;
        private int age;  //年龄必须在18-50之间
        //取age的值
        public int GetAge()
        {
            return age;
        }
        //给age赋值
        public void SetAge(int a)
        {
            if (age >= 18 && age <= 50)
            {
                age = a;
            }
            else
            {
                age = 18;
            }
        }
        //取name的值
        public string GetName()
        {
            return name;
        }
        //给name赋值
        public void SetName(string n)
        {
            name = n;
        }
    }
static void Main(string[] args)
        {
            Ren r = new Ren();
            r.SetAge(8);
            r.SetName("张三"); //将’张三‘赋值给成员name
            Console.WriteLine(r.GetAge+r.GetName);
            Console.ReadLine();
        }

 

 

△使用成员属性来间接访问类里面的成员变量

  定义变量的时候最好用_下划线开头

  选中要做的成员变量右键→重构→封装字段(ctrl+r,e)

      自动生成的代码不是成员变量也不是成员方法  是成员属性

      造好之后可以通过成员属性操作成员变量

例:

    class Student
    {
        private string _Name;
        public string Name
        {
            get { return _Name; }//简化的方法
            set { _Name = value; }
        }
        private int _Age;
        public int Age 
        {
            get { return _Age; }
            set 
            {
                if (value >= 18 && value <= 50)
                {
                    _Age = value;
                }
                else
                {
                    _Age = 18;
                }
            }
        }

        private string _Sex;
        public string Sex {get;set;}//简写 缺点:不能控制值,不能用于构造函数
    }
        static void Main(string[] args)
        {
            Student s = new Student();
            s.Name="赵四";
            s.Sex="";
            s.Age=19;
            Console.WriteLine(s.Sex+s.Name+s.Age);
            Console.ReadLine();
        }   

 

构造方法(函数)
作用:造对象所要调用的方法,用来创建对象

      每一个类都有一个构造方法,不写也有只不过看不到而已

 

特殊性写法特殊 (方法名=类名;没有返回值)

      执行时间特殊(创建对象时执行)

用途:可以对成员进行初始化

举个栗子:

  class Student
    {
        public Student(string s,string n)
        {
            _Sex = s;
            _Name = n;
        }
    }
 static void Main(string[] args)
        {
           Student s = new Student("","张三");//new Student()就是调用了一个方法

            Console.WriteLine(s.Sex+s.Name);
            Console.ReadLine();
        }

 

举个栗子:使用面向对象来求两个圆之间的面积

    class Program
    {
        static void Main(string[] args)
        {
            Yuan y1 = new Yuan();
            y1.R = 10;
            Yuan y2 = new Yuan();
            y2.R = 5;

            double cha = y1.mianji() - y2.mianji();
            Console.WriteLine(cha);
            Console.ReadLine();
        }
    }
    class Yuan
    {
        private int r;

        public int R
        {
            get { return r; }
            set { r = value; }
        }
        public double mianji()
        {
            return r * r * 3.14;
        }
        public double zhouchang()
        {
            return 2 * r * 3.14;
        }
    }

 

函数重载

函数重载需要的条件:函数名要相同,参数的个数或者参数的类型不同

this关键字:

虽然写在类里面,但不是属于类的,而是属于该对象的

一般来说在类里面 this关键字是可以省略的,但是如果有一个方法形参名字和成员名字重复,这时候再调用该对象里面的成员的时候需要加this关键字

is关键字:
判断变量是不是属于某个类型

例:if (y2 is Ren)
  {
    s = "是一个人";
  }
  else
  {
    s = "不是一个人";
  }

as关键字:
转换类型(只能转换兼容类型,可以将子类对象转换为父类对象)

 

二、继承

子类可以继承父类的一切

特点:单继承   一个子类只能有一个父类 一个父类可以有多个子类

C#特殊点:所有类的祖先都是object

base关键字:在子类中代表父类对象,用法和this关键字相同
        如果父类有构造方法,那么子类也要有构造方法,如果父类构造需要参数,那么子类构造也必须有相应的参数。
        子类构造后面可以通过base调用父类的构造方法
        public China(string m):base(m)
        {
        }

    class Program
    {
        static void Main(string[] args)
        {
            China c = new China("zs");
            Console.WriteLine(c.Eat());
            Console.ReadLine();
        }
    }

    class Ren
    {
        private string _Name;

        public string Name
        {
            get { return _Name; }
            set { _Name = value; }
        }
        private int _Age;

        public int Age
        {
            get { return _Age; }
            set { _Age = value; }
        }
        //父类的构造方法
        public Ren(string n)
        {
            _Name = n;
        }

        public string Speak()
        {
            return _Name+"人类正在讲话";
        }

    }

    class China:Ren
    {
        public China(string m):base(m)
        {
            
        }
        public string Eat()
        {
            return base.Name+"用筷子吃饭";
            //return base.Speak();
        }
    }
    class America : Ren
    {
        public America(string m): base(m)
        {
            
        }
        public string Eat()
        {
            return "用刀叉吃饭";
        }
    }

 

sealed关键字

密封类 该类不可以被继承

sealed class 类名

{

}

部分类:partial

可以将一个类拆分成多个部分,分别放在多个文件内

调用需要namespace相同,或用use引用

namespace 命名空间 相当于虚拟文件夹

partial class 类名   //拆分的类均加partial

{

}

转载于:https://www.cnblogs.com/ShenG1/p/5771168.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值