C#寻找指针解决方法

时间:2016-03-04 00:18:25

标签: c# pointers linq-to-sql ref

我试图在类B中创建一个外键到另一个类的ID,A。问题是我无法验证A对象的ID,直到在程序结束时,我的所有B实例都已创建。我希望能够通过引用A对象的id来实例化B的对象,这样当A对象的id改变时,B中的外键值也会改变。我知道我可以'不直接在C#中使用' unsafe'模式,所以我一直在寻找替代方法。作为最后的手段,我可​​以通过我的所有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枚举来确定类型,我不知道是否有办法在查找之前进行转换。

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

2 个答案:

答案 0 :(得分:0)

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类型的对象,因此当通过{{1}访问该对象时,会反映对该对象的任何更改} A的属性。

答案 1 :(得分:0)

我能够使用属性来解决这个问题,当我最初问这个问题时,我已经完全忘记了这些属性。使用BJ Myers'例如:

this
相关问题