【问题标题】:How can I know that object is changed totally like obj1 = obj2?我怎么知道对象完全像 obj1 = obj2 一样改变?
【发布时间】: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


【解决方案1】:

您可以在构造函数中检查字符串的长度。如果长度超过限制,您可以抛出一个新的异常。 在对象启动方面,您可以使用 try catch 块来检查对象是否正确启动。 示例:

class Class
{
    public Class(string string1)
    {
        if(string1.Length > 10)
            throw new Exception("Length Exceeded than limit");
    }
}

class Program
{
    static void Main()
    {
        Class obj;
        try
        {
           obj = new Class("stri");
        }
        catch
        {
           MessageBox.Show("Error");
        }
    }
}

【讨论】:

  • 我编辑了我的问题。再看看,给我帮助。谢谢。
  • @jeonggu 根据您的编辑,这对我来说是不可能的。对于您的问题,我还有许多其他可能的解决方案。如果您简单地向我提供您的问题,我可能会给您一个更好的解决方案。
  • 我知道我需要的是 = 运算符重载,但在 c# 中是不可能的。感谢您的关注。
猜你喜欢
  • 2012-07-30
  • 1970-01-01
  • 1970-01-01
  • 2017-01-31
  • 2021-02-10
  • 2010-10-18
  • 1970-01-01
  • 2012-12-10
  • 2019-09-05
相关资源
最近更新 更多