C#教学第12讲属性2(学习笔记)
2008-11-16 16:41
253 查看
第12讲属性2
快乐乔巴的博客
视频讲师:陈广老师
大家好,今天我们接着上节课的内容继续讲解属性。把上节课的代码稍作调整。
现在让我们来回顾一下属性,声明一个属性,首先要先声明一个跟这个属性相关联的私有字段。接下来就是属性的声明,属性的声明实现了get和set这2个访问器,也就是accessor,在读取属性值的时候,会执行get访问器,给属性赋值时会执行set访问器,当然我们可以在这2个访问器里加入可以实现特定功能的代码。属性的读取和写入跟字段的读取写入没有什么区别,只是在写入属性值的时候会自动的去执行set访问器里的代码,而执行读取属性值的时候会自动的执行get访问器里的代码。
下面我们来看一下属性的种类,属性有四个种类:
1.可读写(Read/Write)属性:需要实现get与set访问器。
2.只读(Readonly)属性:需实现get访问器。
3.只写(Writeonly)属性:需实现set访问器。
4.Static属性:只能访问静态数据。
下面我们用代码来讲解这几个属性;
我们先来设置一个只写的(Writeonly)生日属性
运行后,我们会发现,页面会跳出一个窗体警告用户的年龄非法。
现在我们考虑为User类添加一个年龄的属性,我们可以试想一下,如果年龄的属性设置了可读可写,那么用户第一次注册的时候他写入一个年龄25岁,再10年以后他的年龄还是25岁,这样就非常不合理了。所以呢年龄属性根据他的Birthday也就是他的生日来动态的计算。这样呢,年龄属性就应该声明为一个只读属性,我们来实现年龄的只读属性:
运行代码,我们可以看到1980年出生的,今年是2008年的话就是28岁。
好,下面我们来实现静态属性。现在类里面声明一个计数器,用来记录网站被访问的次数。
我们进行编译,结果是4。我们代码中创建了4个User类的实例,所以结果为4。
好,我们都已经把各个属性的种类一一描述过了,现在来看一属性最常用的地方。(视频中讲述的是C# develop工具,我用的是Visual Studio2005环境,所以用VS来讲述),我们创建一个Windows应用程序,在工具栏上拖拽一个Button控件到Form窗体上,大家将Button的属性窗体显示出来,可以看到Button按钮的所有属性,如图:
我们在Name属性中输入123这样的字符,接着下一个操作的时候,屏幕上会跳出一个警告的窗体:
为什么会弹出这个窗口呢?这就是Button按钮Name属性的set访问器所作用的效果了。输入合法的Name值,就不会有警告了。
好,今天这节课就讲到这里。
由快乐乔巴听课摘写笔记
快乐乔巴的博客
视频讲师:陈广老师
大家好,今天我们接着上节课的内容继续讲解属性。把上节课的代码稍作调整。
using System; class User { private string m_name; private string m_sex; public string Name { get { return m_name; } set { m_name = value; } } public string Sex { get { return m_sex; } set { if (value == "男" || value == "女") { m_sex = value; } else { Console.WriteLine("性别只能为“男”或“女”"); } } } } class Property { static void Main() { User zs = new User(); //调用属性 zs.Name = "张三"; zs.Sex = "男"; Console.WriteLine("姓名:" + zs.Name + " 性别:" + zs.Sex); } }
现在让我们来回顾一下属性,声明一个属性,首先要先声明一个跟这个属性相关联的私有字段。接下来就是属性的声明,属性的声明实现了get和set这2个访问器,也就是accessor,在读取属性值的时候,会执行get访问器,给属性赋值时会执行set访问器,当然我们可以在这2个访问器里加入可以实现特定功能的代码。属性的读取和写入跟字段的读取写入没有什么区别,只是在写入属性值的时候会自动的去执行set访问器里的代码,而执行读取属性值的时候会自动的执行get访问器里的代码。
下面我们来看一下属性的种类,属性有四个种类:
1.可读写(Read/Write)属性:需要实现get与set访问器。
2.只读(Readonly)属性:需实现get访问器。
3.只写(Writeonly)属性:需实现set访问器。
4.Static属性:只能访问静态数据。
下面我们用代码来讲解这几个属性;
我们先来设置一个只写的(Writeonly)生日属性
using System; using System.Windows.Forms; class User { //首先声明一个只写的属性,生日 private DateTime m_Birthday; public DateTime Birthday { //声明一个只写属性只需要实现set访问器 set { //在这里可以对用户的年龄作一个限制 //超过百岁的或者3岁以下的都可以怀疑其真实的身份 if (value < Convert.ToDateTime("1900-1-1") || value.Year > DateTime.Now.Year - 3) //弹出对话框 MessageBox.Show("用户的年龄非法"); else m_Birthday = value; } } } class Property { static void Main() { User zs = new User(); //设置一个非法的生日 zs.Birthday = Convert.ToDateTime("1899-01-01"); } }
运行后,我们会发现,页面会跳出一个窗体警告用户的年龄非法。
现在我们考虑为User类添加一个年龄的属性,我们可以试想一下,如果年龄的属性设置了可读可写,那么用户第一次注册的时候他写入一个年龄25岁,再10年以后他的年龄还是25岁,这样就非常不合理了。所以呢年龄属性根据他的Birthday也就是他的生日来动态的计算。这样呢,年龄属性就应该声明为一个只读属性,我们来实现年龄的只读属性:
using System; using System.Windows.Forms; class User { private DateTime m_Birthday; public DateTime Birthday { set { if (value < Convert.ToDateTime("1900-1-1") || value.Year > DateTime.Now.Year - 3) MessageBox.Show("用户的年龄非法"); else m_Birthday = value; } } //年龄只读属性 public int Age { //只读的只需实现get访问器 get { //年龄的读取是根据生日来动态的计算 //当前年份减去生日的年份就是年龄 return DateTime.Now.Year - m_Birthday.Year; } } } class Property { static void Main() { User zs = new User(); //首先把生日改成一个合法的年份 zs.Birthday = Convert.ToDateTime("1980-1-1"); Console.WriteLine(" 年龄:" + zs.Age); } }
运行代码,我们可以看到1980年出生的,今年是2008年的话就是28岁。
好,下面我们来实现静态属性。现在类里面声明一个计数器,用来记录网站被访问的次数。
using System; using System.Windows.Forms; class User { //声明一个私有的静态字段 private static int m_LoginCount; //声明静态属性 public static int LoginCount { //我们希望User类被创建的时候,它的私有字段m_LoginCount就会被自动加1 //要实现这个功能就可以使用构造函数,这样的话只需要实现get访问器(只读)就可以了 get { return m_LoginCount; } } //构造函数 public User() { m_LoginCount++; } } class Property { static void Main() { //进行计数器的测试 User zs = new User(); User ls = new User(); User ww = new User(); User ml = new User(); //然后读取刚才我们声明的静态属性,静态属性直接类User调用 Console.WriteLine(User.LoginCount); } }
我们进行编译,结果是4。我们代码中创建了4个User类的实例,所以结果为4。
好,我们都已经把各个属性的种类一一描述过了,现在来看一属性最常用的地方。(视频中讲述的是C# develop工具,我用的是Visual Studio2005环境,所以用VS来讲述),我们创建一个Windows应用程序,在工具栏上拖拽一个Button控件到Form窗体上,大家将Button的属性窗体显示出来,可以看到Button按钮的所有属性,如图:
我们在Name属性中输入123这样的字符,接着下一个操作的时候,屏幕上会跳出一个警告的窗体:
为什么会弹出这个窗口呢?这就是Button按钮Name属性的set访问器所作用的效果了。输入合法的Name值,就不会有警告了。
好,今天这节课就讲到这里。
由快乐乔巴听课摘写笔记
相关文章推荐
- C#教学第11讲属性1(学习笔记)
- (原创)c#学习笔记08--面向对象编程简介01--面向对象编程的含义01--对象的含义01--属性和字段
- C#教学第10讲事件2(学习笔记)
- C#教学第20讲字符2(学习笔记)
- C#教学第21讲类(学习笔记)
- C#可扩展编程之MEF学习笔记(三):导出类的方法和属性
- [读书笔记]C#学习笔记五: C#3.0自动属性,匿名属性及扩展方法
- C#教学第15讲索引器1(学习笔记)
- C#2005 .NET3.0高级编程学习笔记————类和结构,类的数据成员,类的函数成员(方法、属性)
- C#学习笔记四: C#3.0自动属性&匿名属性及扩展方法
- C#学习笔记(定义属性get&set)【转】
- C#学习笔记之创建带属性的Xml文档
- C#教学第22讲类的构造1(学习笔记)
- C#学习笔记——关于定义属性
- C#教学第16讲索引器2(学习笔记)
- [读书笔记]C#学习笔记五: C#3.0自动属性,匿名属性及扩展方法
- c#学习笔记——抽象类、抽象方法、抽象属性
- C#学习笔记——属性
- C#教学第24讲析构1(学习笔记)
- C#学习笔记-属性