C# 寻找指针解决方法
C# looking for a pointer workaround
我正在尝试在 class, B 中创建外键到另一个 class, A 的 ID。问题是我无法验证 A 的 ID对象,直到接近程序结束时,我的 B 的所有实例都已创建。我希望能够通过引用 A 对象的 id 来实例化 B 的对象,这样当 A 对象的 id 发生变化时,B 中外键的值也会发生变化。我知道我做不到直接在 C# 中而不使用 'unsafe' 模式,所以我一直在寻找替代方法。作为最后的手段,我可以在所有 B 对象的最后做一个循环,但 B 实际上有很多不同的 classes 和对象,而且它们足够多,我更喜欢更有效的解决方案。
这是我需要的逻辑的粗略示例。
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 的整数 属性 创建一个包装器 class,但我一直无法弄清楚如何使用 linqtodb 将其放入数据库。我以为我可以只定义一个 (int) cast,但这不起作用。据我所知,linqtodb 使用 System.Data.DbType 枚举来确定类型,我不知道是否有办法在查找之前将其转换。
我正在寻找解决问题的新方法,或者寻找一种可以将包装器 class 写入数据库的方法。
C# 不使用指针来引用对象。相反,C# 有 value types and reference types 的概念。所有 类 都是引用类型,这意味着该类型的变量是对对象的 引用。这与其他编程语言中的指针非常相似。
使用直接引用,您的代码将如下所示(为清楚起见更改了一些名称):
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
类型的对象进行 引用 ,因此在通过ClassB
的 A
属性。
我能够使用属性解决这个问题,当我最初问这个问题时我完全忘记了这一点。使用 BJ Myers 的例子:
public class ClassB
{
ClassA A;
public int AID { get {return A.ID;} }
public ClassB(ClassA a)
{
A = a;
}
}
我正在尝试在 class, B 中创建外键到另一个 class, A 的 ID。问题是我无法验证 A 的 ID对象,直到接近程序结束时,我的 B 的所有实例都已创建。我希望能够通过引用 A 对象的 id 来实例化 B 的对象,这样当 A 对象的 id 发生变化时,B 中外键的值也会发生变化。我知道我做不到直接在 C# 中而不使用 'unsafe' 模式,所以我一直在寻找替代方法。作为最后的手段,我可以在所有 B 对象的最后做一个循环,但 B 实际上有很多不同的 classes 和对象,而且它们足够多,我更喜欢更有效的解决方案。
这是我需要的逻辑的粗略示例。
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 的整数 属性 创建一个包装器 class,但我一直无法弄清楚如何使用 linqtodb 将其放入数据库。我以为我可以只定义一个 (int) cast,但这不起作用。据我所知,linqtodb 使用 System.Data.DbType 枚举来确定类型,我不知道是否有办法在查找之前将其转换。
我正在寻找解决问题的新方法,或者寻找一种可以将包装器 class 写入数据库的方法。
C# 不使用指针来引用对象。相反,C# 有 value types and reference types 的概念。所有 类 都是引用类型,这意味着该类型的变量是对对象的 引用。这与其他编程语言中的指针非常相似。
使用直接引用,您的代码将如下所示(为清楚起见更改了一些名称):
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
类型的对象进行 引用 ,因此在通过ClassB
的 A
属性。
我能够使用属性解决这个问题,当我最初问这个问题时我完全忘记了这一点。使用 BJ Myers 的例子:
public class ClassB
{
ClassA A;
public int AID { get {return A.ID;} }
public ClassB(ClassA a)
{
A = a;
}
}