如何将结构从类传递给winform

时间:2010-09-15 19:41:28

标签: c#

我试着这样做:

        m_mystruct = (Form1.mystruct)m_myclass.mystruct;

其中两个结构具有相同的定义。

C#不想进行演员表。

更新:而不是为什么,我修改了我的问题

如何将结构从类传递给winform?

4 个答案:

答案 0 :(得分:6)

具有“相同的定义”并不会使它们成为相同的类型。

事实上,如果有两个定义,那么它们是两种不同的类型。

答案 1 :(得分:3)

因为虽然定义相同,但它们没有任何关联。

如果您希望能够在两种类型之间进行投射,则必须定义explicit/implicit conversions

答案 2 :(得分:2)

如果它们在两个不同的位置定义,那么它们实际上是两种不同的类型。

您可以定义显式和隐式运算符以在两者之间进行转换。它可能看起来像这样。

public struct Foo
{
    public int Value;

    public static explicit operator Bar(Foo source)
    {
        var destination = new Bar();
        destination.Value = source.Value;
        return destination;
    }
}

public struct Bar
{
    public int Value;

    public static explicit operator Foo(Bar source)
    {
        var destination = new Foo();
        destination.Value = source.Value;
        return destination;
    }
}

考虑一下你是否真的需要两个不同的声明。但是,除非你绝对没有其他选择,否则你决定不做以下事情。它可能会以多种不同的方式出错。

Foo f = new Foo();
IntPtr pf = Marshal.AllocHGlobal(Marshal.SizeOf(f));
Marshal.StructureToPtr(f, pf, false);
Bar b = (Bar)Marshal.PtrToStructure(pf, typeof(Bar));
Marshal.FreeHGlobal(pf);

unsafe
{
  Foo f = new Foo();
  Bar b = *(Bar*)&f;
}

答案 3 :(得分:0)

它们基本上是不同的类型!