c# 字段、属性的特性

类的成员:

1. 常量 → 固定的值

2. 字段(变量) → 会变化的值

3. 属性 → 受保护的值

4. 方法 → 一系列动作和行为

5. 运算符 → 特定的运算方式(=,+,-,*,/,%,>=,<=...........)

6. 构造方法 → 按照特定的结构创造、产生东西的方法
如下代码示例

复制代码
 1 namespace 变量_字段_属性//命名空间
 2 {
 3     class Program//
 4     {
 5         static void Main(string[] args)//主方法
 6         {
 7             QQ myQQ = new QQ();
 8           //类 对象 = new 构造方法←创建对象的方法
 9  
10             Console.WriteLine("请输入用户名(按回车键结束):");
11             string myYongHuMing = Console.ReadLine();//变量
12             Console.WriteLine("请输入密码(按回车键结束):");
13             string myMiMa = Console.ReadLine();//变量
14  
15             myQQ.注册(myYongHuMing, myMiMa);
16             Console.ReadLine();
17         }
18     }
19     class QQ//
20     {
21         //在类中,存储数据的变量,称为成员变量,也叫字段
22         public string 注册时间;        //字段(成员变量):会变化的值
23         public string QQYongHuMing;   //字段(成员变量):会变化的值
24         string 注册MiMa;
25  
26         //属性:受保护的值
27         //属性和方法的区别在于:属性没有()、属性没有形参
28         //属性和变量的区别在于:变量没有 { }
29         string QQMiMa//只能读,不能写
30         {
31             get { return 注册MiMa; }//
32         }
33         public QQ()//构造方法:按照特定的结构,创造、产生东西的方法。构造方法名和类名相同
34         {
35         }
36         public void 注册(string myYongHuMing, string myMiMa)//方法:一系列动作和行为
37         {            
38             QQYongHuMing = myYongHuMing;
39             注册MiMa = myMiMa;//变量
40             注册时间 = DateTime.Now.ToString();
41             Console.WriteLine("{0}注册成功!注册时间为:{1}", QQYongHuMing, 注册时间);
42         }
43     }
44 }
复制代码

 

一、字段的定义

字段是在类或结构中直接声明的任意类型变量。

声明一个字段,可以用访问修饰符+类型+变量名称来声明,如下示例:

1    public class 家庭
2    {
3        public int 成员数量;
4        public staitc string 口号;
5        protected readonly int 星级;
6    }

二、属性定义

属性语法是字段的自然延申,属性需要有get或者set的访问器。

声明一个属性,可以用访问修饰符+类型+变量名称来声明,如下示例:

   public class 家庭
   {
       public int 成员数量{ge;set;}
       public staitc string 口号{ge;set;}
       protected readonly int 星级{ge;set;}
   }

三、字段的特性

1.字段通常不使用public关键字,仅在private和protected时才建议使用。如果您要使用public时,建议转为属性。这是为了符合面向对象设计的原因。简单一句话理解就是字段对内,属性对外。

2.可以对字段使用static关键字,这可使字段让调用方在任何时候进行调用,即使不存在任何类的实例。

3.也可以对字段使用static readonly关键字,这样很像const关键字。它们之间的区别是static readonly需要在运行时才可以访问,而const则编译的时候就已经可以访问了。

4.字段是在对象实例的构造函数被调用之前便初始化。 如果构造函数分配了该字段的新值,则它将覆盖在字段声明期间给定的任何值。

5.字段可以使用ref、out关键字传递。

四、属性的特性

1.属性需要定义访问器get或者set,或者两者都有。

2.属性可以隐式定义,即只有简单的get、set。这样声明会非常简洁。如:public int 成员数量 { get; set; }

3.属性还可以使用缓存式定义,这对于一些特殊情形下,非常有用,它通常会结合字段来进行缓存。如下示例:

复制代码
 1        private int _number;
 2        public int 成员数量
 3        {
 4            get
 5            {
 6                return this._number;
 7            }
 8            set
 9            {
10                this._number = value;
11                if(this._number > 6 )
12                {
13                    this.星级一;
14                }
15            }
16        }
复制代码

4.字段是变量,但属性不是变量噢。变量是可以使用ref、out关键字传递的,所以字段可以,但属性不可以。

5.属性可以抽象、虚化、密封,即属性可以加上abstract、virtual、sealed关键字。

五、其它的高级特性

1.老是使用get访问器,我是不是等于每次都调用一下方法,这样是不是增加了额外开销?

答:是等于调用方法,但不会增加额外开销。编译器已经自动优化了get访问器,不会产生额外开销。但是当该属性声明为virtual关键字,由于编译器搞不清楚会不会被子类重写属性,所以,这种情况下会产生额外开销。

2.编写属性时,我可以在get访问器更改缓存字段的值吗?

 

复制代码
 1        private int _number;
 2        public int 成员数量
 3        {
 4            get
 5            {
 6                return this._number;
 7            }
 8            set
 9            {
10                this._number = value;
11                if(this._number > 6 )
12                {
13                    this._number = 6;;
14                }
15            }
16        
复制代码

 

答:如上图,您可以更改缓存字段_number的值。但是这是一种非常差劲的编码风格。您不应该去更改_number字段的值,它的作用就让它仅仅用于记录缓存就好。

 

版权声明:本文为CSDN博主「4564344」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_31653645/article/details/113055459

版权声明:本文为CSDN博主「MrLc666」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/sakenc/article/details/95042964

posted @   Zhongxingxing  阅读(158)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示