C# 论属性的重要性

说到属性,那就离不开字段。什么是字段呢?大家知道C#是一门面向对象的语言。面向对象最重要的是类,类可以包括的就是字段(Field)和方法(Method)。那回来一说,什么是属性呢?属性,便是对字段的赋值和取值进行限制。如何限制呢?下面我们先谈没有属性的情况。

我们先定义一个学生类...

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace ConsoleApplication59
 8 {
 9     class student
10     {
11         /// <summary>
12         /// /字段 必须设置为public,才能为其他类所赋值
13         /// </summary>
14         public string name;//设置姓名
15         public int num;    //设置学号
16         public char sex;   //设置性别
17         public double grade;//设置成绩
18
19         //此处省略方法代码的书写
20     }
21     class Program
22     {
23         static void Main(string[] args)
24         {
25             student stu = new student();
26             stu.name = "MyName";
27             stu.num = 100001;
28             stu.sex =‘F‘;
29             stu.grade = 1.5;
30
31             Console.WriteLine("我是一名学生,我叫{0},我的学号是{1},我的性别是{2},我考试的成绩是{3}",stu.name,stu.num,stu.sex,stu.grade);
32         }
33     }
34 }

由于没有使用到属性,所以字段必须设置为public才能为其他类赋值。

下面我们再来看一下属性是如何写以及用的。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace ConsoleApplication59
 8 {
 9     class student
10     {
11         /// <summary>
12         /// /字段 因为使用了属性,所以字段的限定可以是private(不写则默认为private)。
13         /// </summary>
14         string name;//设置姓名
15         public string Name
16         {
17             get { return name;}
18             set { name = value;}
19         }
20         int num;    //设置学号
21         public int Num
22         {
23             get { return num; }
24             set { num = value; }
25         }
26         char sex;   //设置性别
27         public char Sex
28         {
29             get { return sex; }
30             set { sex = value; }
31         }
32         double grade;//设置成绩
33         public double Grade
34         {
35             get { return grade; }
36             set { grade = value; }
37         }
38
39         //此处省略方法代码的书写
40     }
41     class Program
42     {
43         static void Main(string[] args)
44         {
45             student stu = new student();
46             stu.Name = "MyName";
47             stu.Num= 100001;
48             stu.Sex =‘F‘;
49             stu.Grade = 1.5;
50
51             Console.WriteLine("我是一名学生,我叫{0},我的学号是{1},我的性别是{2},我考试的成绩是{3}",stu.Name,stu.Num,stu.Sex,stu.Grade);
52         }
53     }
54 }

上下两份代码有什么不同呢?一个是把字段的限定从public改为private了,一个是在每个字段后边添加了属性。最后一个,是在赋值和取值(输出)的时候,调用了实例的属性作为输入和输出。所以应征了上面那句话,属性,就是对字段的赋值和取值进行限定。当然上述只是证明了可以通过属性来对字段进行赋值和取值。

为什么通过属性可以进行赋值和取值呢?因为属性对应有两个方法。就是set()和get()方法。set()方法用于赋值,get()方法用于取值。

当使用了属性之后,应该把字段设置为private属性,以对字段进行保护。所以只能通过属性来赋值和取值,表面上是通过属性,其实通过断点调试可以知道,赋值和取值最终还是通过属性的方法,通过字段来赋值。

C#最大的特点就可以进行窗体编程。窗体编程总少不了窗体间传值,下面我们来看看。如何通过属性这种东西来传值。

假设现在我们有两个窗口,一个是Form1,另一个是Form2。Form1是主窗口类,Form2是子窗口类。我们的目的是,把子窗口TextBox的值传递到主窗口的TextBox值。

在Form2里添加代码如下:

1 public string strr
2 {
3     get{return textbox1.Text};
4 }

现在在Form1的button控件事件里,实例化Form2,如下:

1 Form2 f2 = new Form2();
2 f2.ShowDialog();
3 if(f2.DialogReasult == DialogReasult.OK)
4 {
5    textBox1.Text = f2.strr;
6 }

如此,便可以实现窗体间的传值,(非实时)。

如何理解呢?我们把子窗体类Form2只单纯地视为一个类,比如什么学生类啊,图书类啊等等。然后把textbox1.Text视为类里的一个字段。strr视为一个字段。

通过实例化出子窗口f2,我们可以在主窗口,用对象->属性的方法,进行赋值或取值。(上边是“取值”),如此便通过用属性完成了窗体间的传值。需要注意的是,主窗体与子窗体都不用写this.Close(),便可实现关闭。

转载请注明 博客园 :http://www.cnblogs.com/gu-zhan/ 老咸

时间: 2024-10-04 00:04:22

C# 论属性的重要性的相关文章

Qt 窗口属性简介之Qt::WA_DeleteOnClose

一.简述 今天介绍一个简单的窗口属性——Qt::WA_DeleteOnClose. 在正常创建窗口后,我们一般会调用close()方法来关闭窗口,这里我们看一下Q助手中关于close()方法的介绍. bool QWidget::close() Closes this widget. Returns true if the widget was closed; otherwise returns false. First it sends the widget a QCloseEvent. The

Machine Learning In Action 第二章学习笔记: kNN算法

本文主要记录<Machine Learning In Action>中第二章的内容.书中以两个具体实例来介绍kNN(k nearest neighbors),分别是: 约会对象预测 手写数字识别 通过“约会对象”功能,基本能够了解到kNN算法的工作原理.“手写数字识别”与“约会对象预测”使用完全一样的算法代码,仅仅是数据集有变化. 约会对象预测 1 约会对象预测功能需求 主人公“张三”喜欢结交新朋友.“系统A”上面注册了很多类似于“张三”的用户,大家都想结交心朋友.“张三”最开始通过自己筛选的

如何写出优雅的CSS代码 ?(转)

对于同样的项目或者是一个网页,尽管最终每个前端开发工程师都可以实现相同的效果,但是他们所写的代码一定是不同的.有的优雅,看起来清晰易懂,代码具有可拓展性,这样的代码有利于团队合作和后期的维护:而有的混乱,虽然表达出了最终的效果,然而却晦涩难懂,显然团队成员在读这样的代码时就显得无从下手,更不利于后期的维护了.那么如何写出优雅的代码呢?下面我将以一个很小的项目就以下几个方面简单的表达一下自己的看法,如有不妥,望批评指正. 如何整理一个项目. 如何写出清晰易懂的HTML代码. 如何写出优雅的css代

【温故而知新-Javascript】为DOM元素设置样式

1. 使用样式表 可以通过document.styleSheets属性访问文档中可用的CSS样式表,它会返回一组对象集合,这些对象代表了与文档管理的各个样式表. 每个样式表 都由一个CSSStyleSheet 对象代表,它提供了一组属性和方法来操作文档里的样式. 1.1 获得样式表的基本信息 第一步是获得定义在文档中的样式表的一些基本信息. <!DOCTYPE html> <html lang="en"> <head> <meta charse

联合分析

联合分析也称为结合分析.交互分析,是一种多变量分析方法,最初被应用在心理学研究,但是后来发现其在商业领域更能发挥作用,逐渐成为市场分析的常用方法之一. 一.基本思路 联合分析是在已知受测者对某一受测体集合整体评估结果的情形下,经过分解的方法估计其偏好结构.以上说法比较抽象,结合市场分析角度解释为:我们认为消费者是根据构成产品/服务的多个属性多个水平来进行感知和做偏好判断的,也就是说,消费者对产品/服务的偏好每次并不是基于一个因素而是基于几个因素综合判断的.单独或直接的询问消费者各个属性的重要性,

CSS规范 - 代码格式

选择器.属性和值都使用小写 在xhtml标准中规定了所有标签.属性和值都小写,CSS也是如此.单行写完一个选择器定义 便于选择器的寻找和阅读,也便于插入新选择器和编辑,便于模块等的识别.去除多余空格,使代码紧凑减少换行. 如果有嵌套定义,可以采取内部单行的形式. /* 单行定义一个选择器 */ .m-list li,.m-list h3{width:100px;padding:10px;border:1px solid #ddd;} /* 这是一个有嵌套定义的选择器 */ @media all

2.1原理图设计概述

电气原理图是电气工程师之间交流设计的语言,目的在于交流,传递设计中具体细节,因此它具有特殊的元素.属性和设计方法. 第一个属性是图框及标题栏.图框用于说明原理图的制图范围并给原理图划分图块,既一页纸上的分区.一般横竖分别使用字母和数字进行标识,如图1所示A.B.C-和1234-.分区便于工程师沟通图中元器件的具体位置.例如,两个工程师可以在电话里说到:"A1区域里的电感L15就是滤波电感".标题栏用于记录绘图者的基本信息,如图1所示,自己的地址和详细信息都在第一栏中有所记录,除此之外,

【React源码分析】组件通信、refs、key和ReactDOM

React源码系列文章,请多支持:React源码分析1 - 组件和对象的创建(createClass,createElement)React源码分析2 - React组件插入DOM流程React源码分析3 - React生命周期详解React源码分析4 - setState机制React源码分析5 -- 组件通信,refs,key,ReactDOMReact源码分析6 - React合成事件系统 1 组件间通信 父组件向子组件通信 React规定了明确的单向数据流,利用props将数据从父组件传

PL/SQL教程(转)

课程 一 PL/SQL 基本查询与排序 本课重点:   1.写SELECT语句进行数据库查询   2.进行数学运算   3.处理空值   4.使用别名ALIASES   5.连接列   6.在SQL PLUS中编辑缓冲,修改SQL SCRIPTS   7.ORDER BY进行排序输出.   8.使用WHERE 字段. 一.写SQL 命令:     不区分大小写.     SQL 语句用数字分行,在SQL PLUS中被称为缓冲区.     最后以:或 / 结束语句.     也可以用RUN来执行语