2016-03-04 33 views
0

我想創建一個外鍵在一個類,B,到另一個類的ID,答:問題是,我無法驗證A的對象的ID直到附近當我的所有B實例已經創建時,程序結束。我希望能夠通過引用A對象的id來實例化B的對象,這樣當A對象的id發生變化時,B中外鍵的值也會變化。我知道我不能這樣做直接在C#中使用「不安全」模式,所以我一直在尋找替代方法。作爲最後的手段,我可​​以通過所有B對象完成一個循環,但B實際上有許多不同的類和對象,並且有足夠多的我更喜歡更有效的解決方案。C#尋找一個指針解決方法

下面是我需要的邏輯的一個粗略示例。

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枚舉來確定類型,我不知道是否有方法在查找之前進行轉換。

我正在尋找新的方法來解決這個問題,或者以這樣一種方式來轉換包裝類,使得它可以寫入數據庫。

+0

爲什麼不只是在'B'類中添加對'A'的引用? –

+0

你能否詳細說明一下?我嘗試過使用裁判,但據我所知,裁判範圍有限。 – user3747260

+0

不是'ref' - 只是一個參考。我會暫時回覆。 –

回答

0

我能夠解決這個使用屬性,我完全忘記了當我最初問這個問題。以BJ Myers爲例:

public class ClassB 
{ 
    ClassA A; 

    public int AID { get {return A.ID;} } 

    public ClassB(ClassA a) 
    { 
     A = a; 
    } 
} 
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類型的對象,所以任何的變化到對象在通過ClassBA屬性訪問時反映出來。

+0

我正在寫它到一個sql數據庫中的表,所以我需要它在一個可以轉換類型的單獨變量。我可以循環遍歷所有B對象,但由於結構和對象的數量,我寧願不要訴諸於此。如果沒有其他選擇,這可能是我最終做的。 – user3747260

相關問題