zoukankan      html  css  js  c++  java
  • C#属性和变量的区别学习

     
    昨天看三层架构 (具体没怎么弄懂) 发现一般有一页代码专门用户存放字段的 而且都用用属性封装..令我诧异的是 很多字段属性都存在 get{}和set{} 和普通的变量没什么区别(可读可写) 我就感觉属性就是给字段一个多的选择方式,有的字段是不允许更改的.. 

    博客园一查,还真的涨见识了

    刚写程序时总觉得一个字段就能满足要求,何必要使用定义起来麻烦的属性
    要get、set的去定义,代码量还大,真不知道他们的区别和优点
    例:

    public class myclass 
    {

       public static string A

       private sting _B=""; 
       public string Getval 
       { 
           get { retrun _B ;} 
           set { _B = value; } 
       }
    }

    myclass.A 和 myclass.Getval可能实现同样功能,为什么一定要用定义属性?

    现在简单总结下属性较普通变量的优点:
    1、数据安全
       因为A是个公有变量,在类的外部可以任意更改,为了防止因用户任意更改,可用属性get、set来限制_B的的只读、只写或控制_B的最大或最小
       引用一位老兄的简答:"其实自定义变量已经默认实现了属性,只是简单的读写而已,我们定义的属性要在读写的基础上加上更多限制,以后你学的多了就会发现, 很多东西都是为了数据安全而加入的,说白了就是限制,例如接口,接口中的方法你必须(注意是必须,强制性的)要实现"
    2、OOP和编程的一个原则就是数据封装,意味着我们不应该将字段的类型以公开的方式提供给外界 
    3、其实单纯写程序一点不难,难得是如何设计程序,使代码简洁易读而效率又最高,如何保证程序的安全运行

    一直没用在form窗体 中用到这些 属性 虚方法 抽象类 接口之类的.. 怎么在程序中使用呢... 

    过两周课设了,想办法把学的这些都添加进去.. 把C#高级编程里面对窗体的应用也添加进去.. 会收获很多吧 呵呵 

    参考二

    一个类,有时候搞不清楚到底用成员变量还是属性。 
    如: 
    成员变量 
    public   string   Name; 
    或者用属性 
    private   string   name 
    public   string   Name

            get 
            { 
                    return   name; 
            } 
            set 
            { 
                    name   =   value; 
            } 
    }

    属性与成员变量类似,它们都提供数据存储,但属性的功能远比成员变量强大。属性由特殊方法(Get   和   Set   访问器)访问。Get   和   Set   访问器允许在设置或检索属性之后验证属性值、执行其他代码或执行其他任务

    例如

    成员变量这样写 
    public   readonly   string   Name; 
    那还是可以是只读了

    private   string   name 
    public   string   Name

            get 
            { 
                    return   name; 
            } 
            
    }

    面向对象的编程方法是要抽象、封装;在类中,定义的变量是正对类本身而言,我们把它们叫做域。它可以为public   ,private等;属性是针对外部看到的类的特性,是类展示给外部使用者的特性。前面我们讲到了域可以为public,但这样把域申明为public将 不利于类的封装,因为外部使用者可以对类进行直接修改。所以我们就可以用到属性,我们只是公开它们的属性,至于如何对其进行赋值(set)如何进行取值 (get)都已经进行了封装,对于类外部是不可见的。对于外部使用者来说只能够使用它,不能控制它,如何控制操作是由类自身决定的。你理解了吗?

    参考三

    C# 变量 、字段、属性、方法的区别

    string name1;//变量,可以出现在任何需要他的地方

    public class MyClass  //类

    {

    public string name2;//字段,成员变量。是变量,只不过在MyClass这个类中,就改叫字段,也可以叫成员变量

    private string name3;//私有字段,也是变量,加了private 修饰符的

    private string name="";//配合属性来使用

    public string Name//属性

        {

            get {return name;}//get访问器

            set {name=value;}//set访问器

        }

    public string Name_fangfa() //方法

        {

            return name;

        }

     }

    一句话:字段、属性都是变量,只是为了区分和数据安全设置的。

    字段的使用场景:与类或者对象关系密切,建议使用private修饰。

    属性的使用场景:对字段进行封装,提供get/set关键字,进行访问。

    变量的使用场景:与类或者对象关系不密切,常常在方法或者语句块中使用。

    字段和属性是相对于类而言的,而变量相对于方法或者语句块而言,可以再任何地方使用。

  • 相关阅读:
    [置顶] Windows Phone后台音乐详解一
    Android应用开发学习笔记之BroadcastReceiver
    二维码闪电登录流程详解,附demo(1/2)
    C#利用Lambda和Expression实现数据的动态绑定
    从M个数中随机选出N个数的所有组合,有序,(二)
    3DShader之立方体环境映射(cubic environment mapping)
    二维码闪电登录流程详解,附demo(2/2)
    oracle 分区表exchange原理
    禁止页面复制功能 js禁止复制 禁用页面右键菜单
    sleep与信号唤醒的问题 & 内核对信号的处理方式
  • 原文地址:https://www.cnblogs.com/xiaohuasan/p/5581406.html
Copyright © 2011-2022 走看看