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关键字,进行访问。

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

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

时间: 2024-12-25 21:33:47

C#属性和变量的区别学习的相关文章

IOS 杂笔-19(属性与变量的优缺点)

IOS 杂笔-19(属性与变量的优缺点) 在前面的文章中我介绍了属性与变量的区别.这篇博客我将会简单介绍一下属性与变量的优缺点. 变量 优点: 访问速度快 缺点: 使用不灵活 属性 缺点: 耗时 优点: 防止对象被提前创建 防止对象重复创建 防止对象使用时,还没被创建 可以在懒加载方法里面,进行初始化操作

iOS 成员变量,实例变量,属性变量的区别,联系

在ios第一版中: 我们为输出口同时声明了属性和底层实例变量,那时,属性是oc语言的一个新的机制,并且要求你必须声明与之对应的实例变量,例如: 注意:(这个是以前的用法) @interface MyViewController :UIViewController { UIButton *myButton; } @property (nonatomic, retain) UIButton *myButton; @end 在现在iOS版本中: 苹果将默认编译器从GCC转换为LLVM(low leve

iOS开发中 类、对象、实例变量、成员变量、属性变量等区别和关系

类(class):具有相同属性和行为等同一类元素等总称,类是一个抽象的概念. 区分是类还是对象,看它能否继续被细分. 在OC中,类是表示对象类型的结构体,对象通过类来获取自身的各种信息.类由两个部分组成:*.h和*.m文件组成. *.m文件中 implemention部分是类的实现部分,内部包含类中的各种信息,包括各种实例方法或类方法. 类别( category):是为现有的类添加新方法的方式,通常以"类名称+类别名称"来命名. 类别中不能添加新的实例变量.但是可以在类别中添加属性.

C# 属性与普通字段变量的区别

刚写程序时总觉得一个字段就能满足要求,何必要使用定义起来麻烦的属性要get.set的去定义,代码量还大,真不知道他们的区别和优点例: public class myclass { public static string A private sting _B="";    public string Getval    {        get { retrun _B ;}        set { _B = value; }    }} myclass.A 和 myclass.Get

Java基础——成员变量、局部变量和静态变量的区别

之前在刚开始学习Java的时候,就谈了谈Java基础中的变量,虽然知道这货以后会经常用到,但没想到了基本语法这里,竟然有冒出来了成员变量.局部变量和静态变量.变来变去太容易让人搞晕了,挑拣出来梳理一下喽! 要想区分这哥仨,首先,我们得知道它们分别是什么.先从成员变量下刀. 成员变量 我们来研究一个事物: 属性:外在特征:例如人的身高,体重 行为:能够做什么:例如人有说话,打球等行为. 而在Java语言中,最基本的单位是类,类就是用来体现事物的. 用类class来描述事物也是如此: 属性:对应类中

13 PHP 对象基础 属性 方法 静态属性方法 this self 构造方法 学习 析构方法

面向对象思想介绍 OOP:Object Oriented Program面向对象编程. 传统的面向过程 将要完成的工作,分作若干个步骤,或再细分为子步骤,然后后步骤从前往后一步一步完成,最初达致目标. 现代的面向对象 将要完成的工作拆分为"一个一个对象"的任务(功能),每个对象独自完成自己的任务,任务之间的链接通过"调用"来实现,最终也完成了整体的工作. 万事万物都是对象. 面向对象是设计思想的"升华"--面向过程是解决简单问题的自然的思维过程,

属性与字段的区别

本文转载自NetLYF 首先从两者的声明上来看,公共字段只是类用public修饰符所公开的简单公共变量,而属性则是对字段的封装,它使用get和set访问器来控制如何设置或返回字段值. 由于属性的实质是方法(get或set方法),在IL中是没有属性的概念的.所以对于开发过程中常用的赋值和取值操作来说,使用公共变量肯定会比使用属性速度要快,性能上也稍高(方法和变量哪个速度不用说了吧). 公共字段虽然在速度上快,但它必须开放字段为public,这样一来对象的调用者便可以直接修改其值,值的内容是否合法,

SQL Server中临时表与表变量的区别

2009年02月20日 星期五  19:31 我 们在数据库中使用表的时候,经常会遇到两种使用表的方法,分别就是使用临时表及表变量.在实际使用的时候,我们如何灵活的在存储过程中运用它们,虽然它们 实现的功能基本上是一样的,可如何在一个存储过程中有时候去使用临时表而不使用表变量,有时候去使用表变量而不使用临时表呢? 临时表 临时表与永久表相似,只是它的创建是在Tempdb中,它只有在一个数据库连接结束后或者由SQL命令DROP掉,才会消失,否则就会一直存在.临时表在创建的时候都会产生SQL Ser

C#自定义属性(跟成员变量的区别)

属性声明 public int age { get; set; } 从功能上等价于 private int m_age; public int age {get { return m_age; }set { m_age = value; }} 在这里,属性和成员变量的区别不大. 等价于 public int age; 也就是一开始的时候, 无视 有限性.读写权限的情况下.先偷懒, 写成public int age { get; set; } 项目写到某个阶段了, 要求 age 数值必须有效了.