每次复习理解更深刻:C#属性、字段、变量

2024-02-24 20:48

本文主要是介绍每次复习理解更深刻:C#属性、字段、变量,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

c#的字段就是指私有域(变量)
class A
{
int i;

public int I
{
get{....}
set{....}

}

其中,i是字段,I是属性,
字段是属于一个类的,在类中定义(注意:是类中,而不是类中的某个方法或属性中)
在本类中可以用
this.字段名访问
且本类中的所有属性、方法等都可以访问
也就是说它的作用域是整个类。

而局部变量是属于一个函数或语句块的
它的作用域是从定义开始,到离开语句块。

C#中的变量、字段、域、属性、属性过程

在C#中:

     域:      表示与对象或类相关联的变量,修饰符不论是不是public。(与字段类似)
    字段:   表示与对象或类相关联的变量。通常来讲修饰符是public的成员变量称为字段,而private更适合说是局部变量。(与域类似)
    属性:   表示域或字段的自然扩展,使得在保证封装性的基础上实现了访问私有成员的便捷性。




域表示与对象或类相关联的变量,声明格式如下:

attributes field-modifiers type variable-declarators;

    域的修饰符field-modifiers可以是:new、public、protected、internal、private、static、readonly。实际上,域相当于C++中的简单成员变量。在下面的代码中,类A包含了三个域:公有的X和Y,以及私有的z。
class A
{
public int x;
public string y;
private float z;
}

字段

    字段是与对象或类相关联的变量。  
    当一个字段声明中含有static修饰符时,由该声明引入的字段为静态字段(static   field)。它只标识了一个存储位置。不管创建了多少个类实例,静态字段都只会有一个副本。  
    当一个字段声明中不含有static修饰符时,由该声明引入的字段为实例字段(instance   field)。类的每个实例都包含了该类的所有实例字段的一个单独副本。  
   在下面的示例中,Color类的每个实例都有r,g,b实例字段的不同副本,但是Black,White,Red,Green和Blue等静态字段只有一个副本:  
public   class   Color  
{  
        public   static   readonly   Color   Black   =   new   Color(0,   0,   0);  
        public   static   readonly   Color   White   =   new   Color(255,   255,   255);  
        public   static   readonly   Color   Red   =   new   Color(255,   0,   0);  
        public   static   readonly   Color   Green   =   new   Color(0,   255,   0);  
        public   static   readonly   Color   Blue   =   new   Color(0,   0,   255);  
         
        private   byte   r,   g,   b;  
         
        public   Color(byte   r,   byte   g,   byte   b)   {  
              this.r   =   r;  
              this.g   =   g;  
              this.b   =   b;  
        }  
}  
    如示例所示,通过readonly修饰符声明只读字段。给readonly字段的赋值只能作为声明的组成部分出现,或者在同一类中的实例构造函数或静态构造函数中出现。


属性

    为了类的封装性,一般是把字段设为Private, 把属性设为公有来操作字段。   

    属性(property)是字段的自然扩展,两者都是具有关联类型的命名成员,而且访问字段和属性的语法是相同的。然而,属性与字段不同,不表示存储位置。相反,属性有访问器(accessor),这些访问器指定在它们的值被读取或写入时需执行的语句。 

   属性的声明类似于字段,不同之处在于属性的声明以定界符{}之间的get访问器和/或set访问器结束,而不是分号。同时包含get访问器和set访问器的属性称为读写属性(read-write   property)。只具有get访问器的属性称为只读属性(read-only property)。只具有set访问器的属性称为只写属性(write-only property)。
  
    get访问器相当于一个具有属性类型返回值的无参数方法。除了作为赋值的目标外,当在表达式中引用属性时,会调用该属性的get访问器以计算该属性的值。
  
    set访问器相当于一个具有单个名为value的参数和无返回类型的方法。当一个属性作为赋值的目标,或者作为++或--运算符的操作数被引用时,就会调用set访问器,所传递的自变量将提供新值。
  
List类声明了两个属性Count和Capacity,依次是只读和只写的。下面是使用这些属性的示例:  
List   names   =   new   List();  
names.Capacity   =   100;                     //调用set访问器  
int   i   =   names.Count;                       //调用get访问器  
int   j   =   names.Capacity;               //调用get访问器  

    与字段和方法类似,对于实例属性和静态属性,C#两者都支持。静态属性是声明中具有static修饰符,而实例属性则没有。 
    属性的访问器可以是虚拟的。当属性声明中包含virtual,abstract,override修饰符时,它们将运用到属性访问器。


    来自MSDN中的内容:

属性与字段
属性与字段都可在对象中存储和检索信息。它们的相似性使得在给定情况下很难确定哪个是更好的编程选择。
在以下情况下使用属性过程:
   1. 需要控制设置或检索值的时间和方式时。
   2. 属性有定义完善的一组值需要进行验证时。
   3. 设置值导致对象的状态发生某些明显的变化(如 IsVisible 属性)。
   4. 设置属性会导致更改其他内部变量或其他属性的值时。
   5.必须先执行一组步骤,然后才能设置或检索属性时。
在以下情况下使用字段:
   1. 值为自验证类型时。例如,如果将 True 或 False 以外的值赋给 Boolean 变量,就会发生错误或自动数据转换。
   2. 在数据类型所支持范围内的任何值均有效时。Single 或 Double 类型的很多属性属于这种情况。
   3. 属性是 String 数据类型,且对于字符串的大小或值没有任何约束时。


Visual Basic中属性和变量的差异(在C#中应该也是一样的)


变量和属性都表示可以访问的值。但在存储和实现方面有所不同。
变量
    变量 直接对应于内存位置。可以使用单个声明语句定义变量。变量可以是“局部变量”,在过程中定义且仅可用于该过程;它也可以是“成员变量”,在模块、类或结构中定义,但不在任何过程中定义。成员变量又称“字段”。
属性
    属性 是在模块、类或结构中定义的数据元素。使用 Property 和 End Property 语句之间的代码块定义属性。此代码块包含一个 Get 过程t或一个 Set 过程,或两者都包含。这两个过程称为“属性过程”或“属性访问器”。除了检索或存储属性的值外,它们还可以执行自定义操作,如更新访问计数器。
不同点
    下表指出了变量和属性之间的一些重要差异。
差异点                                    变量                          属性
声明                                    单个声明语句             代码块中的一系列语句
实现                                    单个存储位置             可执行代码(属性过程)
存储                                    直接与变量的值关联   通常包含内部存储;在属性的包含类或模块外部,这些内部存储不可用属性的值可能作为也可能不作为一个存储元素(见下(1))  

存在可执行代码                   无                               至少必须有一个过程
读写访问权限                      读/写或只读                 读/写、只读或只写
自定义操作                          不可能                         可以当作部分设置或检索属性值执行
     注解:(1)和变量不同,属性的值可能不直接对应于单个存储项。为方便或安全起见,存储可能拆分为几块;也可能以加密格式存储值。在这些情况下,Get 过程将汇编这些块或解密存储值,然后 Set 过程会加密新值或将其拆分到构成存储的各个组成部分中。属性值可以是临时的,如一天中的某个时间,在这种情况下,每次访问此属性时,Get 过程将及时计算此属性。

类与模块之间的差异
类和模块之间的主要差异在于:类可以实例化为对象,而标准模块则不能。

第二部分

变量举例:
string a="";
字段与属性是相对于类来说的;在类里面把数据成员叫做字段,通常定义为似有字段,加访问修饰符private,属性是对私有字段的封装,供类在外部访问,对于类外部来说,只能看到属性,不能看到私有字段,对属性的存取操作就是对类的私有成员的操作!
举个例子:
class A
{
string _strName

public string strName
{
get{

return this._strName;
}
set{
this._strName=value;
}

}
这样当你访问类A的私有字段_strName时,就可以通过strName来访问了!

第三部分

首先 我们得知道什么是字段。
我们通常会记录一些信息 然后如何记录呢
比如你现在要配比一个药方 别人肯定是这么描述的
当归4钱 胖大海一钱……
计算机世界里 我们要记录这些信息 这时候我们就需要字段 也就是我们声明的变量
那有人又要问了。既然有了变量 我把变量声明成public 直接用(实例.变量)不就可以访问了吗?
为什么还要属性这么多余的东西呢?
这是因为有些东西 我们不想暴露给别人 你声明的变量可能会给别人去用 如果别人具有随便读写这个字段的权限 就很难保证字段的正确和安全性
所以属性里可控制对字段的读写权限(get是读,set是写) 再来谈谈他的正确性
如果你要记录一个学生的数学成绩(假设满分是100)结果有人把这个记录数学成绩的字段设置为150或者-1,那么显然是错的。我们可以在属性里加以控制,减少这种错误!

这篇关于每次复习理解更深刻:C#属性、字段、变量的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/743333

相关文章

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

2. c#从不同cs的文件调用函数

1.文件目录如下: 2. Program.cs文件的主函数如下 using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Windows.Forms;namespace datasAnalysis{internal static

变量与命名

引言         在前两个课时中,我们已经了解了 Python 程序的基本结构,学习了如何正确地使用缩进来组织代码,并且知道了注释的重要性。现在我们将进一步深入到 Python 编程的核心——变量与命名。变量是我们存储数据的主要方式,而合理的命名则有助于提高代码的可读性和可维护性。 变量的概念与使用         在 Python 中,变量是一种用来存储数据值的标识符。创建变量很简单,

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

如何通俗理解注意力机制?

1、注意力机制(Attention Mechanism)是机器学习和深度学习中一种模拟人类注意力的方法,用于提高模型在处理大量信息时的效率和效果。通俗地理解,它就像是在一堆信息中找到最重要的部分,把注意力集中在这些关键点上,从而更好地完成任务。以下是几个简单的比喻来帮助理解注意力机制: 2、寻找重点:想象一下,你在阅读一篇文章的时候,有些段落特别重要,你会特别注意这些段落,反复阅读,而对其他部分