c#多个类之间的共享结构

本文关键字:共享 结构 之间 | 更新日期: 2023-09-27 18:11:12

只是想得到一些关于什么是共享结构体的最佳实践的建议。

我有许多内部类,我想使用结构体的相同实例。而不是传递结构作为参数有一个替代方案?

c#多个类之间的共享结构

我想你是在问如何创建一个结构体的引用或指针。在c#中,您只能对仅由内在值类型(int, byte, float, double, char)组成的结构体进行此操作

以以下示例为例,并使用不安全的选项 编译它
public struct Data
{
    public int id;
    public double x;
}
unsafe class A
{
    Data* data;
    public A(Data* data)
    {
        this.data = data;
    }
    public int ID { get { return data->id; } set { data->id = value; } }
}
unsafe class B
{
    Data* data;
    public B(Data* data)
    {
        this.data = data;
    }
    public double X { get { return data->x; } set { data->x = value; } }
}
unsafe class Program
{
    static void Main(string[] args)
    {
        Data store = new Data();
        A a = new A(&store);
        B b = new B(&store);
        a.ID = 100;
        b.X = 3.33;
        Console.WriteLine("id={0} x={1}", store.id, store.x);
    }
}

它将打印出"id=100 x=3.33",即使值类型变量store从未被直接赋值。这两个类都包含对struct的引用,并且可以操作其值。

想了解更多关于指向结构体的指针的知识,请参阅本文或MSDN文档。是的,以上是合法的c#代码,尽管有不安全关键字,但如果编码得当,它还是相当可靠和健壮的。哦,而且它的速度也非常快。

你应该考虑只使用结构体来定义看起来像字符串、int等基本类型的数据结构。

这些结构体被视为值类型,而类被视为引用类型。