c#-C#对象赋值操作可以禁止么

问题描述

C#对象赋值操作可以禁止么
C#对象时引用类型的赋值操作后一个对象的字段修改会导致另一个的对应字段的修改。可以禁止""=""号操作避免这样的错误么?

解决方案

可以使用readonly修饰,或者通过get/set限制对象状态的修改,这里演示下后一种做法:
class User
{
public string UserName { get; private set; }
public int Age { get; private set; }
public User(string userName int age) { UserName = userName; Age = age; }
}
这样只有对象构造的时候可以一次性指定值,之后就是只读的了。

解决方案二:
对于属性,可以设置只读

对于对象,可以设置其构造函数为private

解决方案三:
不行,""=""是赋值操作,如果对象为引用对象,则都是指向内存中的同一个地址。这个又不可以重载。你是设计上的问题吧。

解决方案四:
你别给他赋值不就行了。

解决方案五:
可以使用类似 private readonly string name =""admin""; 设置属性的初始值。

解决方案六:
Class A
{
public string name{ get; private set; }
}

时间: 2024-09-28 21:32:34

c#-C#对象赋值操作可以禁止么的相关文章

《C++面向对象高效编程(第2版)》——4.6 对象赋值的语义

4.6 对象赋值的语义 C++面向对象高效编程(第2版) 赋值与复制的操作非常类似.在C++中,绝大多数的复制操作都由语言隐式调用(当对象按值传递或按值返回时).当通过现有对象创建新对象时,也进行了复制操作(但不是很频繁).与复制相反的是,赋值是必须由程序员显式调用的操作.然而,在Eiffel和Smalltalk中,赋值和复制操作都由程序员显式调用.这也是基于值的语言与基于引用的语言之间的区别. 在C++中,对于对象和基本类型赋值都具有相同的含义.把基本类型变量赋值给另一个(兼容的)基本类型变量

JavaScript创建一个object对象并操作对象属性的用法

 这篇文章主要介绍了JavaScript创建一个object对象并操作对象属性的用法,实例分析了javascript使用object类定义对象及属性的用法,需要的朋友可以参考下     本文实例讲述了JavaScript创建一个object对象并操作对象属性的用法.分享给大家供大家参考.具体分析如下: 下面的JS代码创建了一个myMovie对象,并给对象title和director属性赋值,通过Object定义对象,其属性可以不用定义,直接调用即可,非常简单. ? 1 2 3 4 5 6 <sc

c-如何判断一个类能否安全地依赖于拷贝和赋值操作的默认版本?为什么?

问题描述 如何判断一个类能否安全地依赖于拷贝和赋值操作的默认版本?为什么? 初学C++,在书上看到的习题.如果有什么好的建议也请不吝赐教 解决方案 如果你的类成员都是基本数据类型,比如int,byte,char等,那么就可以依赖默认版本 比如一般定义结构体,我们一般没有提供自己额外的拷贝构造函数等 但是对于类,一般还是自己实现,因为你不知道将来是不是会增加新的数据类型 解决方案二: 如果一个类所有的成员都是能够调用默认构造函数,那么他就可以安全的依赖于拷贝和赋值的默认版本. 还有需要注意的是,如

JavaScript创建一个object对象并操作对象属性的用法_javascript技巧

本文实例讲述了JavaScript创建一个object对象并操作对象属性的用法.分享给大家供大家参考.具体分析如下: 下面的JS代码创建了一个myMovie对象,并给对象title和director属性赋值,通过Object定义对象,其属性可以不用定义,直接调用即可,非常简单. <script type="text/javascript"> var myMovie = new Object(); myMovie.title = "Aliens"; myM

谈谈javascript中使用连等赋值操作带来的问题_javascript技巧

前言 文章标题这句话原本是在国外某JavaScript规范里看到的,当时并没有引起足够的重视,直到最近一次出现了bug发现JS里的连等赋值操作的特色(坑). 网上搜索一番发现一个非常好的连等赋值的(来源1,来源2)例子: var a = {n:1}; a.x = a = {n:2}; console.log(a.x); // 输出? 答案是: console.log(a.x); // undefined 不知道各位有没有答对,至少我是答错了. 遂借此机会好好看看JS连等赋值是怎么回事 赋值顺序?

Fireworks MX 2004 对象的操作

对象 2.对象的操作 对象的选择:用"指针" 工具可以对绘图对象进行直接的点选.当要选择多个对象时,可同时按下Ctrl+A键或直接进行框选,均可选中所有对象.对象被同时选中后拖动任意一个对象,其它的对象也会随着一起移动. 当一个对象完全处于另一个对象下面时,就很难用"指针"工具进行直接的点选.这时就可以使用工具条上的"选择后方对象" 工具来选择后面的对象,如图3-08. 图3-08 对象的填充:用钢笔工具画一个随意的封闭路径,然后在该路径的属性对

(一二四)给类对象赋值、以及类对象的返回值

于直接给对象赋值: 之前学过,如何给对象在初始化时进行赋值. 对于C++11来说,初始化方式有三种: ① man c = man{ "cc",1 }; ② man d = { "dd",1 }; ③ man f{ "ff",1 };   假如有一类M,他有两个私有成员a和b(int类型). 于是新建一对象M q; 对象q使用默认构造函数(假如都赋值为0,这个不重要): 现在,我们想给对象q的第一个私有成员赋值,该怎么办? 这章刚学过运算符重载,难

匿名对象赋值-大神帮看一下代码,为什么t5 = addC(a1, a2)中,只调用了一次copy构造函数?

问题描述 大神帮看一下代码,为什么t5 = addC(a1, a2)中,只调用了一次copy构造函数? #include<iostream> using namespace std; class ABC { public: ABC(int a = 0, int b = 0) { this->a = a; this->b = b; printf("我是有参构造函数!n"); } ABC(ABC &c) { this->a = c.a; this-&g

mysql存储过程中变量的定义赋值操作

昨天我们讲了mysql教程存储过程创建修改与删除,下面我们这篇教程是讲关于mysql存储过程中变量的定义赋值操作哦. 一.变量的定义 定义一个变量语法如下: declare var_name[,...] type[default value] 看一个变量定义实例 declare last date; 二.mysql存储过程变量赋值 变量的赋值可直接赋值与查询赋值来操作,直接赋值可以用set来操作,可以是常量或表达式如果下 set var_name= [,var_name expr]... 给上面