C# 正在寻找指针解决方法

本文关键字:解决 方法 指针 寻找 | 更新日期: 2023-09-27 18:37:21

>我正在尝试在一个类 B 中创建一个外键,以指向另一个类 A 的 id。 问题是,直到程序接近尾声时,我才能验证 A 对象的 ID,此时我的所有 B 实例都已创建。 我希望能够通过引用 A 对象的 id 来实例化 B 的对象,以便当 A 对象的 id 发生变化时,B 中外键的值也会发生变化。 我知道如果不使用"不安全"模式,我就无法直接在 C# 中做到这一点,所以我一直在寻找替代方法。 作为最后的手段,我可以在最后对所有 B 对象进行循环,但 B 实际上是许多不同的类和对象,并且它们的数量足够多,我更喜欢更有效的解决方案。

这是我需要的逻辑的粗略示例。

using System;
namespace sandbox
{
    public class A
    {
        public int ID;
        public A(int id)
        {
            ID =  id;
        }
    }
    public class B
    {
        public int reftoAID;
        public B(int id)
        {
            reftoAID = id;
        }
    }
    public class TestMain
    {
        static void Main()
        {
            A a = new A(1);
            B b = new B(a.ID);
            a.ID = 3;
            Console.WriteLine(b.reftoAID); //prints 1, but I need 3
            Console.ReadLine();
        }
    }
}

我尝试使用保存 id 的 int 属性创建一个包装类,但我一直无法弄清楚如何使用 linqtodb 将其放入数据库。 我以为我只能定义一个(int)强制转换,但这不起作用。 据我所知,linqtodb使用System.Data.DbType枚举来确定类型,我不知道是否有办法在查找之前对其进行转换。

我正在寻找解决问题的新方法,或者以一种可以将其写入数据库的方式转换包装类的方法。

C# 正在寻找指针解决方法

C# 不使用指针来引用对象。 相反,C# 具有值类型和引用类型的概念。 所有类都是引用类型,这意味着该类型的变量是对对象的引用。 这与其他编程语言中的指针非常相似。

使用直接引用,您的代码将如下所示(为清楚起见,更改了一些名称):

public class ClassA
{
    public int ID;
    public ClassA(int id)
    {
        ID = id;
    }
}
public class ClassB
{
    public ClassA A;
    public ClassB(ClassA a)
    {
        A = a;
    }
}
public class TestMain
{
    static void Main(string[] args)
    {
        ClassA a = new ClassA(1);
        ClassB b = new ClassB(a);
        a.ID = 3;
        Console.WriteLine(b.A.ID); //prints 3
        Console.ReadLine();
    }
}

ClassB的构造函数接受对类型为 ClassA 对象的引用,因此当通过 ClassBA 属性访问该对象时,对该对象的任何更改都会反映出来。

我能够使用属性解决这个问题,当我最初问这个问题时,我完全忘记了。 以BJ Myers为例:

public class ClassB
{
    ClassA A;
    public int AID { get {return A.ID;} }
    public ClassB(ClassA a)
    {
        A = a;
    }
}