(19)封装字段和get、set属性

当一个字段被修饰成public时,就意味着它可以被任意修改。

 class A
    {
        public int age = 20;
        public string name="me";
    }
 class B
    {
        static void Main(string[] args)
        {
            A a = new A();
            a.age = 10;
            a.name = "meeeee";
        }
    }             

可是有的时候字段并不希望被修改或者给字段需要加一个限制。这时候就需要把字段设置成私有,再给这个字段设置一个公有的属性(类似方法)来控制该字段。

把age和name的public改成private这样就完成了封装。但是这样改完以后除了A类以外,其他的类不能对它进行任何操作,这个字段就没有了意义。

给段加一个属性就能够对其访问了。

属性的写法

.通常属性名要设置成首字母大写的字段名(例如age属性设成Age)。这样是为了能够快速看出字段对应的属性是哪个。

.属性必须是公有的方便用户访问.

.属性的数据类型要和字段的一致.

属性的get和set方法

属性至少要有get或set方法中的一个。(不然字段就无法被读取或修改了)

get方法是读取字段的意思。格式固定是get{return 字段名;}

set方法用来修改字段。它的默认值是value。

读取或修改属性

.在别的类中新建一个想要用的哪个字段的类的实例

.然后用实例.属性名来操作这个字段

封装并设置属性的代码如下:

class A
    {
        private int age = 20;

        public int Age
        {
            get { return age; }
            set { age = value; }
        }
       private string name = "me";

       public string Name
       {
           get { return name; }
           set { name = value; }
       }
    }
    class B
    {
        static void Main(string[] args)
        {
            A a = new A();
            a.Age = 10;
            a.Name = "meeeee";
        }
    }         

放到实际开发中就要根据实际情况需要增减一些代码。

比如:这是一个招聘软件中的局部代码

.人的name是固定的所以只保留get

.age参加工作的条件是18岁以上.不仅需要读取,而且还要控制age>18.

 class A
    {

        private string name = "me";
        private int age = 20;

        public string Name
        {
            get { return name; }
        }
        public int Age
        {
            get { return age; }
            set
            {
                if (value>=18)
                {
                    age = value;
                }
                throw new Exception("年龄不能小于18");
            }
        }

    }
    class B
    {
        static void Main(string[] args)
        {
            A a = new A();
            a.Age = Convert.ToInt32(Console.ReadLine());//输入数据必须大于18不然报错
            string myname = a.Name;
        }
    }        
时间: 2024-10-12 20:54:04

(19)封装字段和get、set属性的相关文章

非静态的字段、方法或属性“System.Web.UI.Page.ClientScript...”要求对象引用 (封装注册脚本)

在写项目时想对asp.net的注册前台脚本事件进行封装,就添加了一个BasePage.cs页面,但一直报错‘非静态的字段.方法或属性“System.Web.UI.Page.ClientScript...”要求对象引用”’ 原写法: /// <summary> /// 显示客户端提示框 /// </summary> /// <param name="msg"></param> public static void ShowMsg(strin

错误 10 非静态的字段、方法或属性“Test10.Program.a”要求对象引用

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace Test10 7 { 8 class Program 9 { 10 //int a = 0; 注意存放位置!!!!! 11 const int i = 927; 12 static void Main(string[] args) 13 { 14 int a = 0; 15 try

Visual Studio快速封装字段方法

在面向对象的编程中我们常常要将各个字段封装为属性,但是当字段多的时候往往这个重复的操作会大大降低我们的开发效率,那么如何才能快速的封装字段呢?下面就给大家2个解决方法: 1.使用封装字段方法: 选中字段--点击右键--重构--再选择封装字段,就OK了 2.使用propfull代码段: 输入propfull,按2次Tab按键,输入数据类型--按一次Tab--设置字段名--按一次Tab--设置属性名,就OK了

学习小技能-封装字段

环境:VS2013+C# 学习继承过程中,看着视频,快捷键补全输入代码,感觉很爽,于是就开始了... 一个快捷输入的办法. 初始代码: public class Driver { private int _name;//这里重构代码,得到以下结果 } 结果: public class Driver { private int _name; public int Name { get { return _name; } set { _name = value; } } } 通过封装字段的方法 快捷

C#变量初始化问题:字段初始值无法引用非静态字段、方法或属性

http://www.cnblogs.com/bluestorm/p/3432190.html 问题:字段初始值设定项无法引用非静态字段.方法或属性的问题 下面代码出错的原因,在类中定义的字段为什么不能用? public class Test {public Test(){}public int Age=23;public int temp = Age;//ERROR 字段初始值设定项无法引用非静态字段.方法或属性} C#规定在类内部只能定义属性或者变量,并初始化,不能直接变量引用变量. 在初始

面向对象 字段、方法、属性

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _02面向对象复习 { class Program { static void Main(string[] args) { Person p = new Person(); p.Age = -110; p.Name = "zhangsan"

非静态的字段,方法或属性要求对象引用如何解决

App_Code.SendMessHelper.SendMessage(): 这样写会报非静态的字段,方法或属性要求对象引用 类里面的方法有兩种表現:一种是直接可以來用的,还有一种是必须实例化以后才能使用的.前者要求在方法生明的時候必須加上static关键字(是不是想起Main方法了???),因爲這個方法不能被实例化!后者就不能加static了,這種方法不能像前面的一樣通過类名.方法名來调用,必須通過实例名.方法名來調用(实例化的过程就是創建一個对象的么). 正确的形式: SendMessHel

C# static 字段初始值设定项无法引用非静态字段、方法或属性

问题:字段或属性的问题字段初始值设定项无法引用非静态字段.方法 下面代码出错的原因,在类中定义的字段为什么不能用? public string text = test(); //提示 字段或属性的问题字段初始值设定项无法引用非静态字段.方法 protected void Page_Load(object sender, EventArgs e) { } public string test() { return ""; } 可以通过属性方式调用: public string text

编写高质量代码改善C#程序的157个建议——建议91:可见字段应该重构为属性

建议91:可见字段应该重构为属性 字段和属性的本质区别就是属性是方法. 查看下面这个Person类型: class Person { public string Name { get; set; } } 经过编译器编译后,针对属性Name实际会生成一个private字段和两个public方法: [CompilerGenerated] private string <Name>k__BackingField; [CompilerGenerated] public void set_Name(st