之前一直在C#中使用这两者, 却一直不知道成员变量和属性还是不一样的两种概念. 不过说不一样, 也不是完全对.

简单举个例子:

public class myclass
{
public string A;
private sting B = ""; public string GetB
{
get { retrun B; }
set { B = value; }
}
}

该代码中,

A, B即为成员变量, 也叫做字段;

GetB 即为属性;

其中 get{}set{}被称作访问器.

相较于A字段, B配合GetB属性存在, 所以可以说明属性比较成员变量的优点是:数据安全.

OOP的核心就是封装, 利用属性可以防止用户随意更改类成员变量的值, 做到安全限制.

属性可以防止对成员变量的任意修改,包括设置只读、只写; 还可以在成员变量的输入和输出时进行限制, 比如设置B的最大值或者最小值.

这些都是代码中A无法直接做到的.

摘抄一下网上的总结

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

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

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

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

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

像我这种刚开始思考这个问题或者忽视这个问题的人, 其实更多的是忽视了程序开发的本质就是如何简洁高效, 如何安全运行. 我们编写代码时, 往往为了实现功能在堆砌代码, 这种行为不仅对程序没好处, 对个人进步也没好处啊, 需引以为戒.

C# 成员变量和属性的区别的更多相关文章

  1. iOS 成员变量和属性的区别

    一. 成员变量 1.成员变量的作用范围: @public:在任何地方都能直接访问对象的成员变量 @private:只能在当前类的对象方法中直接访问,如果子类要访问需要调用父类的get/set方法 @p ...

  2. Java 成员变量和属性的区别

    例一: 一个Student pojo类: public class Student{ private String name; private int age; public String getNa ...

  3. OC基础成员变量、属性变量、实例方法与类方法

    首先,为什么我们要定义一个新类呢?按照我的理解,就是为了抽象出来一个新的东西(也就是类),用来存储更多的数据变量和方法,一切类都直接或间接继承与NSObject. 在类的头文件里我们可以定义成员变量. ...

  4. runtime第二部分成员变量和属性

    接上一篇 http://www.cnblogs.com/ddavidXu/p/5912306.html 转载来源http://www.jianshu.com/p/6b905584f536 http:/ ...

  5. Objective-C Runtime 运行时之二:成员变量与属性

    类型编码(Type Encoding) 作为对Runtime的补充,编译器将每个方法的返回值和参数类型编码为一个字符串,并将其与方法的selector关联在一起.这种编码方案在其它情况下也是非常有用的 ...

  6. Objective-C Runtime 运行时之二:成员变量与属性(转载)

    在前面一篇文章中,我们介绍了Runtime中与类和对象相关的内容,从这章开始,我们将讨论类实现细节相关的内容,主要包括类中成员变量,属性,方法,协议与分类的实现. 本章的主要内容将聚集在Runtime ...

  7. 《java入门第一季》之面向对象面试题(成员变量与局部变量的区别)

    /* 成员变量和局部变量的区别? A:在类中的位置不同 成员变量:在类中方法外 局部变量:在方法定义中或者方法声明上 B:在内存中的位置不同 成员变量:在堆内存 局部变量:在栈内存 C:生命周期不同 ...

  8. 刨根问底Objective-C Runtime(4)- 成员变量与属性

    http://chun.tips/blog/2014/11/08/bao-gen-wen-di-objective[nil]c-runtime(4)[nil]-cheng-yuan-bian-lian ...

  9. java 成员变量和局部变量的区别

    将对象的存储在数组中会报错 public static void main(String[] args) { ArrayList<Goods> arrayList = new ArrayL ...

随机推荐

  1. python的协程和异步io【select|poll|epoll】

    协程又叫做微线程,协程是一种用户态的轻量级的线程,操作系统根本就不知道协程的存在,完全由用户来控制,协程拥有自己的的寄存器的上下文和栈,协程调度切换时,将寄存器上下文和栈保存到其他地方,在切换回来后, ...

  2. html菜单和课程表

    菜单: <html> <head> <meta charset="utf-8"> <title>菜单练习</title> ...

  3. ShowMsg函数

    ShowMsg():显示提示信息,跳转到相应页面 例子: ShowMsg(,);

  4. MySQL 开启远程访问权限

    1.登陆mysql数据库    mysql -u root -p 查看user表 mysql> use mysql;Database changedmysql> select host,u ...

  5. [SoapUI] 各种日期计算

    import java.util.*; import java.text.SimpleDateFormat; // current date String dateNew = today() // t ...

  6. jqgrid单元格合并

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx. ...

  7. STAX项目结束总结

    STAX:Support Taxonomy Management Console. 使用了MVC+WCF+jQuery+Azman.msc(权限控制)+kendoUI+SQL SERVER 2012

  8. 使用delphi 开发多层应用(二十三)KbmMW 的WIB

    解释WIB 是什么之前,先回顾以下我们前面的各种服务工作方式.前面的各种服务的工作方式都是请求/应答方式. 客户端发送请求,服务器端根据客户端的请求,返回相应的结果.这种方式是一种顺序式访问,是一种紧 ...

  9. [VC++入门]指针一

    俗话说没有搞清楚指针就没有学会C/C++,所以指针是一个相当重要的东东,相当年在用 C#调用C++写的动态链接库时,以为C++中的指针就是C#中的引用类型(ref),但是看了一下却不是这样.指针当然和 ...

  10. js模态窗口返回值(table)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...