字段和属性有什么区别?

    class Student
{
private int age;
public int Age
{
get
{
return age;
}
set
{
age = value;
}
}
}

你有没有想过:为什么要有属性?为什么不直接将字段设置为公有?

简单的总结:属性更像是方法,用属性来代替直接访问字段可以有更好的逻辑控制。

比如:

    class Student
{
private int age;
public int Age
{
get
{
return age;
}
set
{
if(age > 0 && age < 200)
{
age = value;
}
else
{
throw new Exception("年龄不合法");
}
}
}
}

当然也可以通过属性来限制只能设置或获取某一个字段的值。

一个属性是否必须和一个字段相对应?答案是不一定。

    class Student
{
private int age;
public int Age
{
get
{
return 0;
}
set
{
//...
}
}
}

自动实现的属性,实现的原理?

在c#中可能会经常看到类似下面的属性:

    class Student
{
//自动实现的属性
public int Age{ get; set; }
}

那它的内部实现机制呢?————单独的属性是不能存储数据的,数据都保存在字段中。

这是C#提供的一种简单的语法,称为自动实现的属性,声明属性而不提供get/set方法的实现,C#会自动的声明一个私有字段(编译器幕后做的工作)。在本例中,字段类型是int,也就是属性的类型。另外,编译器会自动实现get_Age和set_Age方法,分别返回和设置字段中的值。

get_Age和set_Age从哪来?

下一篇 C#篇(二)——属性的实质 我们再做分析。

最新文章

  1. 限制textarea输入内容长度(多浏览器兼容、鼠标操作可控)
  2. 解决jquery.validate.js的验证bug
  3. 攻城狮在路上(壹) Hibernate(十一)--- 映射实体关联关系
  4. iOS 学习笔记 二 (2015.02.26)
  5. 欧拉工程第51题:Prime digit replacements
  6. flumeng-kafka-plugin
  7. 其中 (%{WORD:x_forword}|-) |表示或的意思
  8. 使用NODEJS+REDIS开发一个消息队列以及定时任务处理
  9. NOIP2014解题报告
  10. redisTemplate 操作
  11. PHP运行模式(cgi,fast-cgi,cli, ISAPI ,web模块模式)【转载】
  12. 从运维的角度分析使用阿里云数据库RDS的必要性--你不应该在阿里云上使用自建的MySQL/SQL Server/Oracle/PostgreSQL数据库
  13. java版Web Socket,实现消息推送
  14. hdu 5002 (动态树lct)
  15. SQL Join各种内联外联说明
  16. 写的还不错的专题,android性能优化
  17. JavaScript类型相关常用操作
  18. new image()
  19. WPF-MVVM-ICommand接口实现
  20. SpringBoot整合StringData JPA

热门文章

  1. JUnit4.8.2源码分析-4 RunNotifier与RunListener
  2. Codeforces 676E The Last Fight Between Human and AI 规律
  3. vue2 filter过滤器的使用
  4. kinEditor动态渲染的问题
  5. 重设数据文件大小sql语句
  6. 路飞学城Python-Day2
  7. jQuery 完整 ajax示例
  8. 关于wdsl
  9. luogu P2252 取石子游戏(威佐夫博弈)
  10. springMVC 定时器配置