【发布时间】:2016-10-17 13:13:15
【问题描述】:
我的语言是 C#。
obj1.Value = "test";
如果像这样更改对象值,则很容易处理。 我可以将事件代码放在名称属性集中。
但是
Class obj1 = new Class("string1");
obj1 = new Class("string1");
当像这样通过赋值改变对象时, 我怎样才能知道并处理它?
我想限制名称长度,它受另一个属性“长度”的限制。
我有 3 个构造函数。
Class(string value);
Class(int length);
Class(int length, string value);
还有 2 个属性。
.Value
.Length
我把obj1做成了这样
Class obj1 = new Class(3, "ab")
我的问题是这样的。
obj1 = new Class("abcde")
我想限制值长度为 3,但 new Class("abcde") 的长度为 5。 (通过编码可以有不同的值,但在我的情况下长度是 5)
我该如何解决?
【问题讨论】:
-
1- 您应该指定您使用的语言。例如,在 C++ 中,您可以重载运算符“=”来处理此问题。然而,在大多数语言中,可能无法观察参考变化。 2-这样做的目的是什么?你真的想用这个做什么?
-
@Walfrat 1. 抱歉,我的语言是 C#。似乎在 C# 中“=”重载是不可能的。正确的? 2. 我想将名称属性长度限制为 10。
-
您不需要知道对象是否已更改,是吗?只需检查 setter 中的长度即可?
-
看这里stackoverflow.com/questions/12989192/…你可以定义一个自定义setter,所以如果长度> 10你可以抛出异常。
-
您的代码显示的是赋值,而不是对 obj`1 变量 引用的对象的更改。对象根本没有变化。该变量现在只是指向不同的对象。为什么你关心一个新对象存储在变量中?如果你有一个长方法为同一个变量分配不同的值,你应该修复该方法,而不是尝试检测分配
标签: c# object variable-assignment