值类型属性??

article/2025/10/31 2:51:17

         再一次由于C#中值类型和引用类型的区别 犯了错误。
         假设在类中包含一些值类型的成员(比如结构,数组),你希望为外部程序提供访问和修改这些成员的能力,同时又不想直接暴露成员,在c#中最常见的做法就是为这样的成员添加一个属性:

struct  Matrix
{
       
float m11;
       
float m12;
       ...............
       
float m44;
}


class  MyClass
{
         
private Matrix _matrix;
         
public Matrix MyMatrix
         
{
              
get{return _matrix;} 
              
set{_matrix = value:}

           }

}

        这看起来是最正常不过的代码了。可是当你希望单独修改属性中的某个成员时,问题就来了:

MyClass test  =   new  MyClass()
test.MyMatrix.m11 
= 1.0f;

      上面两行代码初看起来似乎没有什么问题,可是当你编译时,编译器会告诉你test.MyMatrix.m11不是一个变量,无法为他赋值!!问题出在哪里呢?好吧,注意了,Matrix是一个值类型,对于值类型来说,总是按值传递的。我们把上面一行代码“翻译”一下它等价于:

Matrix temp  =  test.MyMatrix;
temp.m11 
=   1.0f ;

     现在看到问题所在了把,我们先获得了MyMatrix属性的一个拷贝,然后对这个拷贝赋值,显然,由于temp只是一个临时的中间变量,所以这样的代码是没有意义的。因此C#编译器把它做为了一个编译错误。

    这似乎是一个语言上的缺陷,通常由于性能上的考虑,才会把数据设计为值类型,但在这里,如果我们需要为结构中的某个成员进行修改,就不得不更新整个结构,因为只有test.MyMatrix = someValue才能正常工作。当然,你也许还可以把_matrix直接作为公共成员(这样可能失去一些必要的保护措施),或者为值类型中的每个成员写一个属性(如果你足够疯狂的话),但似乎始终无法获得一引用类型一样简便的访问方法。

 


http://chatgpt.dhexx.cn/article/IqS6h1ym.shtml

相关文章

计算属性

1、什么是计算属性 计算属性:可以理解为能够在里面写一些计算逻辑的属性。 作用:1)减少模板中的计算逻辑 2)数据缓存。当我们的数据没有变化时,不在执行计算的过程 3)依赖固定的数据类型(响应式…

根据属性名获取、设置属性值

1.根据属性名获取属性值 可以通过JDK自带的反射下的getClass下的getDeclaredField并传递一个属性名字来获取该属性 属性名:fileName,对象:Object object; Field field object.getClass().getDeclaredField(fileName); 设置对象…

常用属性 属性值

文本属性(用来修饰文本) 1、font-size:数值单位; 字体大小 页面中默认字号大小为16px 2、font-family:字体名; 如果字体名为中文,引号可加可不加;如果字体名为一个英文单词,引号可不加&#…

.39属性名和属性值

一、属性名 对象的属性名可以随便起,但使用特殊字符时,需要用下面的形式 语法:对象[属性名]属性值 输出时也要采用该种形式 这种形式,更加常用,并且可以直接传递变量 二、属性值 属性值可以为任意的数据类型&…

对象的属性名与属性值

注意共有5个步骤,按顺序操作下去 1.在对象中保存的值称为属性,对象的属性名不强制要求遵守标识符规则,什么名称都可以,我对象属性的语法:1对象.属性名,注意:如果对象中没有的属性,不…

关于HTML中的那些特殊字符

一些特殊的符号,我们在html 里面很难或者不方便直接使用,我们此时可以使用下面的替代代码。 虽然有很多,但是我们平时用的比较较少, 大家重点记住 空格 大于号 小于号 就可以了,剩下的回来查阅。 总结: 是…

python处理HTML特殊字符

提取html数据时遇到特殊字符的问题 ",<,>都被转换为特殊字符&#xff0c;导致html页面一团乱麻 通过各种百度&#xff0c;最终找到python的html包处理相关特殊字符 最终结果

怎么在html中加特殊符号,html中特殊符号

html中特殊符号: 教你用输入法打出任意特殊符号&#xff0c;缺失&#xff1a;html中3248/9 最近老有人问我这个符号怎么打&#xff0c;那个符号怎么打。 我每次回答的都是&#xff0c;你要打的是特殊符号&#xff0c;这种特殊符号不能用输入法打出来&#xff0c;需要借助一些工…

Html特殊字符表(建议收藏)

Html特殊字符表(建议收藏) 原始字符entity原始字符entity"&quot ;&&amp ;’&#039 ;<&lt ;>&gt ;&nbsp ;¡&iexcl ;¢&cent ;£&pound ;&curren ;&yen ;&brvbar ;&sect ;&uml ;©&…

最全的HTML特殊字符列表

最全的HTML特殊字符列表 松柏 2004-08-17 13:40:10 摘要&#xff1a;从 CSDN 上发现的&#xff0c;听说是最全的HTML特殊字符列表 Nonbreaking space ¡ ¡ ¡ Inverted exclamation ¢ ¢ ¢ Cent sign £ £ £ Pound sterling …

HTML特殊字符代码大全

速查表 在html中展示特殊字符&#xff0c;需要采用特殊的编码格式&#xff0c;以下对这些代码进行了整理&#xff0c;以备查阅。 动手测一测 把以下代码复制到一个txt文件中&#xff0c;然后将文件后缀txt改为html&#xff0c;在浏览器里试试看吧。 <!DOCTYPE html>…

HTML的特殊字符

平时写代码很少用到HTML的特殊字符&#xff0c;最常用的可能是 了&#xff0c;但有时在移动端为了节省时间&#xff0c;可能会用这些字符实现某种特殊效果&#xff0c;现整理如下&#xff1a; 使用方法&#xff1a; 这些字符属于unicode字符集&#xff0c;所以&#xff0c;你…

HTML中的特殊字符

在HTML页面中&#xff0c;有一些特殊的符号无法直接使用&#xff0c;我们可以使用下面的特殊字符来进行代替 在以上的特殊字符中我着重介绍一下空格、小于、大于这三个比较常用的字符 1. 空格符 在html中我们不能直接通过打空格的方式来隔开文字&#xff0c;而是应该在文字…

HTML特殊字符符号大全

HTML常用特殊字符&#xff1a; 只要你认识了 HTML 标记&#xff0c;你便会知道特殊字符的用处。

16进制字符串生成CRC-16/CCITT-FALSE校验码

/*** author yichuaniscas.ac.cn* version 1.0* date 2021/11/8 21:51*/ public class Crc {/*** CRC-16/CCITT-FALSE x16x12x51 算法** info* Name:CRC-16/CCITT-FAI* Width:16* Poly:0x1021* Init:0xFFFF* RefIn:False* RefOut:False* XorOut:0x0000** param hexString* para…

CRC-16/X25、CRC-16/CCITT_FALSE、CRC-16/XMODEM校验码

这几天做北斗定位设备的协议解析&#xff0c;需要进行CRC-16的校验&#xff0c;设备使用的参数模型是CRC-16/X25&#xff0c;本人使用的是Java语言&#xff0c;网上没找到关于CRC-16/X25 的Java版本&#xff0c;都是C语言的多。转换一下记录在这里&#xff0c;方便以后使用。CR…

CCAT介绍

全国信息化计算机应用技术资格认证CCAT介绍 CCAT是Certificate of Computer Application Techniques 的简称&#xff0c;中文全称是“全国信息化计算机应用技术资格认证”&#xff0c;是由国家人事部中国高级公务员培训中心和教育部全国高等学校计算机教育研究会共同推出的一种…

C#_CRC-16/CCITT-FALSE计算加判断

C#_CRC-16/CCITT-FALSE计算加判断 前言&#xff1a;浪费半天时间研究出来的&#xff0c;试了网上其他好几个版本都算了不对&#xff0c;讲述的也不明确&#xff0c;我是直接移植一个c语言的版本&#xff0c;直接看代码&#xff0c;一个函数包含计算和判断的工能 private bool …

CRC-CCITT CRC-16

CRC分为以下几种标准&#xff1a; CRC-12码CRC-16码CRC-CCITT码CRC-32码 在线CRC计算器 https://www.lammertbies.nl/comm/info/crc-calculation.html CRC计算器 http://www.pc6.com/softview/SoftView_100981.html CRC16 const uint16_t Table[256] {0x0000U, 0x1…

C语言CRC-16 CCITT格式校验函数

C语言CRC-16 CCITT格式校验函数 CRC-16校验产生2个字节长度的数据校验码&#xff0c;通过计算得到的校验码和获得的校验码比较&#xff0c;用于验证获得的数据的正确性。基本的CRC-16校验算法实现&#xff0c;参考&#xff1a; C语言标准CRC-16校验函数。 不同同应用规范通过…