【问题标题】:Cast one class object to other class object将一个类对象转换为另一个类对象
【发布时间】:2014-10-31 06:27:59
【问题描述】:

我有两个类 A 和 B,我想将 A 的一个实例强制转换为 B。最好的方法是什么? 如何创建实用程序类来执行此任务?

public class A
{}
public class B
{}

【问题讨论】:

  • 您必须实现自己的转换才能从一个类转到另一个类。
  • 您在问题中定义的类不能相互转换。 C# 是一种强类型语言,因此您可以进行此类转换。只能在继承线(基类或接口)上下执行强制转换。
  • 您问题中描述的两种类型完全不相关,因此不能将它们转换为另一种。正如 Tim 所说,您可以提供一种转换,该转换将基于另一种类型复制或以其他方式初始化一个类型的实例。
  • 看this
  • 我的意思是改变对象或映射到其他

标签: c#


【解决方案1】:

查看Casting and Type Conversions 上的 MSDN 文档是一个不错的起点。

由于这两个类之间没有直接关系,您需要写一个Conversion Operator。例如:

public class A
{
    public int AValue { get; set; }
}

public class B
{
    public int BValue { get; set; }

    public static explicit operator B(A instanceOfA)
    {
        return new B { BValue = instanceOfA.AValue };
    }
}

然后你可以写:

A instanceOfA = new A { AValue = 7 };
B instanceOfB = (B)instanceOfA;

// Will output "7"
Console.WriteLine(instanceOfB.BValue);

我从中派生出此示例的文档位于 MSDN,Using Conversion Operators。

如果两个类之间存在直接关系,例如B 派生自A,例如:

public class A
{
    public int Value { get; set; }
}

public class B : A
{
    public string OtherValueSpecificToB { get; set; }
}

如果您想从 B 转换到 A,则不需要任何额外的代码:

B instanceOfB = new B { OtherValueSpecificToB = "b", Value = 3 };
A instanceOfBCastToA = (A)instanceOfB;

// Will output "3";
Console.WriteLine(instanceOfBCastToA.Value);
// Will not compile as when being treated as an "A" there is no "OtherValueSpecificToB" property
Console.WriteLine(instanceOfBCastToA.OtherValueSpecificToB);

【讨论】:

    猜你喜欢
    • 2013-09-18
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 2021-10-30
    • 1970-01-01
    相关资源
    最近更新 更多