2 liuci3234 liuci3234 于 2014.11.18 21:50 提问

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

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

7个回答

caozhy
caozhy   Ds   Rxr 2014.11.18 22:03

可以使用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; }
}
这样只有对象构造的时候可以一次性指定值,之后就是只读的了。

q107770540
q107770540   Ds   Rxr 2014.11.19 09:05

对于属性,可以设置只读

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

caozhy
caozhy   Ds   Rxr 2017.12.26 23:29

还可以用const,常量就不能修改值了。

woainiliuliu
woainiliuliu   2014.11.18 22:23

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

yuwenge
yuwenge   2014.11.19 15:02

你别给他赋值不就行了。

duanzi_peng
duanzi_peng   Rxr 2014.11.19 18:54

可以使用类似 private readonly string name ="admin"; 设置属性的初始值。

joeyluo57
joeyluo57   2014.11.24 13:55

Class A
{
public string name{ get; private set; }
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
基类对象和派生类对象之间的赋值关系
基类对象和派生类对象之间的赋值关系具体是指:基类的对象可不可以赋值给子类对象或者子类对象可不可以赋值给基类对象。         一般来说,只有派生类的对象可以赋值给基类的对象,反之,则不可以。例如:        为什么派生类对象可以给基类对象赋值呢?反之则不可以呢?这是因为基类对象a的成员比派生类对象b的成员少。所以基类对象赋值给派生类对象时会出错。上面是一种情况,还有另外一种情况
java里面给对象赋值,慎用赋值符号(=)
<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"
关于将一个对象赋值给另一个对象
在C++,我们都知道当一个对象初始化另一个对象时,我们需要使用拷贝构造函数,而且两个对象都会有一块对空间,但成员函数将为两个对象所有 而在C#当中,当将一个对象赋值给另一个对象时,那么他们的变量都将保存同一块内存的地址,即两个对象是相同的。 MyClass m1 = new MyClass(); MyClass m2 = new MyClass(); m1 = m2; if(m1==m2){
java对象赋值操作
对基本数据类型的赋值时很简单的。但是为对象赋值时,却有一点不一样;对一个对象进行操作的时候,我们真正操作的是对对象的引用。所以当将一个对象赋值给另一个对象,实际上是将对象的引用从一个地方赋值到另一个地方。当我么将一个对象赋值给另一个对象后,我们修改其中的一个对象,另一个对象也随之改变。class Tank{ int m; } public class HelloWord { public st
int 变量直接赋值,是原子操作吗?
a = 100; ... b = a;    /* atomic ? */
C++对象赋值与C#对象赋值----C++与C#值传递与引用传递浅析
在C#中,看下面一段程序: class A     {         public int value;         public A(int x)         {             value = x;         }         public void set(int x)         {             value = x;    
java 赋值操作符:基本类型的赋值和对象的赋值
赋值操作符“=”,它表达的意思是取右边的值,把它赋给左边。“=”运算符的使用分两种情况: 1.对基本类型的赋值:基本类型存储了实际的数值,而并非指向一个对象的引用,所以在为其赋值的时候,是直接从一个地方赋值到了另外一个地方,如对基本类型a=b,那么b的内容就赋值给了a,若接着有修改了a,而b根本不会受到这种影响。 2.对对象进行赋值: 对对象进行赋值,我们实际操作的是对象的引
c++派生类对象赋值给基类对象
基类对象和派生类对象之间的赋值关系具体是指:基类的对象可不可以赋值给子类对象或者子类对象可不可以赋值给基类对象。         一般来说,只有派生类的对象可以赋值给基类的对象,反之,则不可以。例如: [cpp] view plain copy Father a ;    // 基类对象   Son b ;       // 派生类对象  
今天碰到的一个问题,关于通过基类对象的引用给子类赋值
以下是在论坛上提出的问题:关于通过基类对象的引用给子类赋值的问题:比如说:class A{    public:            A(int num):m_num(num){}    protected:            int m_num;};///////////////////////////////////////////A zhy(123);class B:p
对象用等号赋值
<br />今天和同事(Delphi编程)讨论了一个问题:同一类声明的多个对象之间赋值,传递的是值还是引用<br />在C++中,对象在声明的时候就已经进行了初始化,调用类的构造函数对新声明的对象进行初始化,对象之间用等号赋值,就是对对象内容的拷贝和覆盖,相当于传值,并不改变对象的地址<br />如果在声明的时候声明的是指针或引用,在对象之间用等号进行赋值,改变的将是对象成员变量的地址,对象的地址没有改变<br />对象的地址为什么没有改变,这一点我不怎么明白,希望有高人给予指点,在此先谢过了<br />下