【问题标题】:Trying to control object assignment in c#试图在 C# 中控制对象分配
【发布时间】:2018-10-12 06:32:28
【问题描述】:

我想做的是控制两个对象的分配。 因此,如果我的类在字符串的情况下看起来像这样(非常粗略但只是示例)

public class fixLen
{
    public int len;
    public string str;

    public fixLen(string str, int len)
    {
       this.str = str;
       this.len = len;
    }
}

然后在我的主课中我这样做;

fixLen str1 as new fixLen("abc", 3);
fixLen str2 as new fixLen("wxyz", 4);

str1 = str2

当 str2 分配给 str1 时,我希望能够查询每个对象的 len 属性并执行分配。在这种情况下,我希望 str1.str 属性以“wxy”值结束,将“wxyz”截断为 3 个字符(str1.len)。我试图用“操作员”程序元素来实现这一点,但它似乎不允许我同时查询源对象和目标对象。此功能的一个关键元素是它必须在类中实现。我不想在我的主类中使用任何其他语法;

str1 = str2

我想用最简单的术语来说,我想创建另一种原子类型,例如 int、float 或 string。

如果是数字;

public class fixNum
{
    public int len;
    public string val;

    public fixLen(int val, int len)
    {
       this.val= val;
       this.len = len;
    }
}

然后在我的主课上;

fixNum num1 as new fixNum(0, 2)
fixnum num2 as new fixNum(999, 3)
num1 = num2 + 1

所以 num1 最终的值为 99。

【问题讨论】:

  • 我只是在这里有个想法,但是为什么不在fixLen 类中创建一个方法,比如Import(FixLen obj),它将另一个此类型的对象作为参数,然后从obj 但仅限于它自己的长度(this.len)?实现起来似乎很简单,但也许还有其他选择可以实现这种行为。
  • 我认为它可以在复制构造函数的帮助下完成,但是您必须添加所需的功能,即要复制的字符串的字符数
  • 所以; str1 = str2 将变为; str1.Import(str2) 这就是你的想法吗?在我的情况下,必须在所有功能中实现底层功能。像; num1 = num3 + num4 / num5 所以在我的情况下,这些 num 对象都将具有 len 属性,并且 num1 将被截断为固定位数。所以我需要这个功能在对象被引用时启动
  • dotnetfiddle.net/17BgTQ 看到这个.. 并尝试在更新代码以获得更好的帮助时解释事情

标签: c# variables variable-assignment


【解决方案1】:

我能想到的唯一方法是:

在你的类中定义一个方法:

public void SetValue(fixLen f)
{
    str = f.str.Substring(0, len);
}

并使用它str1.SetValue(str2);

【讨论】:

  • 想一想,我们能否像在 C++ 中一样在 C# 中重载“等号运算符”。 ?
  • @WaleedNaveed 不,至少我不知道 C# 中的任何可能性。 See this
  • 你可以,但它是静态的,据我所知,你只能访问源类,而不是目标类(我确定我在这里遗漏了一些东西)docs.microsoft.com/en-us/dotnet/csharp/programming-guide/…
  • @blink 是两个结构体之间的转换。
  • 我很抱歉。不过,当我在课堂上尝试时,它确实有效。我想我将不得不使用 .表示法并添加 setter getter
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-28
  • 1970-01-01
  • 2018-06-01
  • 2014-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多