-3

出于教育目的,我在选角方面做了很多事情(可能从未使用过)。其中之一引导我找到我不喜欢的解决方案。

假设,我有 2 节课:

class ClassA
{
    public int MyInt;
    public string MyString;
}

class ClassB
{
    public int SomeInt;
}

现在我想将 ClassA 隐式转换为 ClassB。为此,我可以写:

public static implicit operator ClassB(ClassA obj1)
{
    ClassB obj2 = new ClassB();
    obj2.SomeInt = obj1.MyInt;

    return obj2;
}

但是有MyString迷路的可能,这是绝对不允许的。为了解决这个问题,我在转换中添加了:

if (obj1.MyString != null)
   throw new DataLostException();

这工作正常,但必须有更简单的解决方案。我的问题是,如何以更简单的方式处理这种数据丢失?

4

2 回答 2

1

您正在有效地执行我所说的向上转换,但没有常规继承模型(因为常规向上转换将是 B 扩展 A)。Upcasts 会导致数据范围变窄。如果你向上推荐一个较少特色的课程,那么你期望你会得到更少的信息,这就是它的工作原理。如果您使用 A 类,则不必关心 mystring,因为 A 类没有 mystring。

于 2012-06-11T10:43:55.420 回答
1

你的解决方案是正确的。这种数据丢失是创建用户定义的转换运算符时的“默认行为”,这是该语言的一种相对高级的使用。

两个类之间没有继承关系,框架也无法知道该字符串与另一个类之间的关系。谁知道呢,它可能是一条在新环境中完全不需要的诊断信息。

于 2012-06-11T10:45:16.503 回答