C#基础-面向对象-封装

封装

命名空间

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

namespace ConsoleApp6
{
class BankCount
{
    public string cardid;
    public double dMoney;
    public string name;

    //两个构造函数,一个有参,一个无参
    public BankCount()
    {

    }
    public BankCount(string _cardid,double _dMoney,string _name)
    {
        this.cardid = _cardid;
        this.dMoney = _dMoney;
        this.name = _name;
    }
}
}

using System;

namespace ConsoleApp6
{
class Program
{
    static void Main(string[] args)
    {
        BankCount bcount = new BankCount("10086", 100, "Chale");
        Console.WriteLine("存款金额:{0}", bcount.dMoney);
        Console.WriteLine("取款金额:");
        double d = Convert.ToDouble(Console.ReadLine());
        bcount.dMoney = bcount.dMoney - d;
        Console.WriteLine("剩余金额:"+bcount.dMoney);
    }
}
}

上面的程序需要修改,为了保证数据的安全性,不让外面程序对文件直接修改。对字段进行封装,封装就是不让字段直接暴露在外直接访问或设置

为了保证数据的安全性,对字段进行封装,封装就是不让字段直接暴露在外直接访问或设置
提供一种机制在字段赋值的时候进行检查,属性。通过属性对这个字段进行访问或设置

// 修改为私有字段,所以不能在外部对这个字段进行访问
private string cardid;
private double dMoney;
private string name;

下面讲一下属性应用

一般我们在外部可以直接对属性进行操作,所以它的访问权限是public
下面代码就是表示访问cardid和设置cardid

public string Cardid
{
    get    // 表示在访问属性时,所对应的字段
    {
        return cardid;
    }
    set    // 隐式参数value,表示赋值的数据
    {
        cardid = value;
    }
}

对属性可以进行基本判断,程序如下:

public double DMoney{
get{
    return dMoney;
}
set{
    if (value < 0){
        dMoney = 0;
    }else{
        dMoney = value;
    }
}
}

修改后代码:

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

namespace ConsoleApp6
{
    class BankCount
    {
        // 为了保证数据的安全性,对字段进行封装,封装就是不让字段直接暴露在外直接访问或设置
        // 提供一种机制在字段赋值的时候进行检查,属性。通过属性对这个字段进行访问或设置

        // 修改为私有字段,所以不能在外部对这个类的字段进行访问
        private string cardid;
        private double dMoney;
        private string name;

        // 一般我们在外部可以直接对属性进行操作,所以它的访问权限是public
        public string Cardid
        {
            get    // 表示在访问属性时,所对应的字段
            {
                return cardid;
            }
            // 账号初始化后就不能修改,所以这边把设置删去,防止账号被修改
            //set    // 隐式参数value,表示赋值的数据
            //{
            //    cardid = value;
            //}
        }
        public double DMoney
        {
            get
            {
                return dMoney;
            }
            set
            {
                if (value < 0)
                {
                    dMoney = 0;
                }
                else
                {
                    dMoney = value;
                }
            }
        }
        public string Name
        {
            get
            {
                return Name;
            }
            set
            {
                name = value;
            }
        }


        //两个构造函数,一个有参,一个无参
        public BankCount()
        {

        }
        public BankCount(string _cardid,double _dMoney,string _name)
        {
            this.cardid = _cardid;
            this.dMoney = _dMoney;
            this.name = _name;
        }
    }
}
using System;

namespace ConsoleApp6
{
    class Program
    {
        static void Main(string[] args)
        {
            BankCount bcount = new BankCount("10086", 100, "Chale");
            Console.WriteLine("存款金额:{0}", bcount.DMoney);
            Console.WriteLine("取款金额:");
            double d = Convert.ToDouble(Console.ReadLine());
            bcount.DMoney = bcount.DMoney - d;
            Console.WriteLine("剩余金额:"+bcount.DMoney);

            // bcount.Cardid = "10089";    //账号不能修改,需要修改代码,可以去掉属性的set就能防止修改
        }
    }
}

posted @ 2019-04-07 11:52  cicarius  阅读(135)  评论(0编辑  收藏  举报