1

私はC#プロジェクトに取り組んでいます

私はこのような2つのクラスを持っています:

public class A
{
    public DataTable dtA {get; set;}
}

public class B
{
    DataTable dtB{get;set;}

    public B(DataTable dt)
    {
        dtB = dt;
    }
}

static void Main()
{
    A a = new A();
    B b = new B(a.dtA);
}

dtB が正確に dtA (ref dtA) であることを望みます。しかし、Up Code では dtB は New DataTable であり、dtA ではありません。(私は dtB を変更したい場合、この変更は dtA にも適用されます)

問題の解決方法


解決済み:

dtA が null で dtB に渡された場合、dtB は常に null になります (dtA がデータで満たされている場合でも)。

4

4 に答える 4

1

DataTable は参照型であるため、コードは意図したとおりに機能します。ただし、この状況では簡単に転倒する可能性があるため、注意が必要です。

void Main()
{
    A a = new A();
    a.dtA = new DataTable("TestTable");
    B b = new B(a.dtA);
    Console.WriteLine(b.TableName); // Same as A.dtA
    Console.WriteLine(a.dtA.TableName);  // Same as internal datatable in B
    a.dtA = new DataTable("SecondTable");
    Console.WriteLine(b.TableName);   // No more the same as A.dtA
    Console.WriteLine(a.dtA.TableName);
}

// Define other methods and classes here
public class A
{
    public DataTable dtA;
}

public class B
{
    DataTable dtB{get;set;}

    public B(DataTable dt)
    {
        dtB = dt;
    }
    public string TableName
    {
        get{ return dtB.TableName;}
        set{ dtB.TableName = value;}
    }
}

ご覧のとおり、A の DataTable を変更すると、B の DataTable は古い参照を指しているままになり、2 つが同じではなくなります。より良いアプローチについては、Tim Schmelter からの回答を確認してください。

于 2013-03-05T09:53:03.840 に答える
0

同じものを使用したい場合はDataTable、同じ参照を使用する必要がありますA

public class A
{
    public DataTable dtA;
}

public class B
{
    public A a;

    public B(A a)
    {
        this.a = a;
    }
}

現在、両方が同じテーブルを使用しています。

static void Main()
{
    A a = new A();
    B b = new B(a);
    Console.Write(a.dtA == b.A.dtA); //true
}

それが実際に必要なものである場合は、Bから継承させることもできます。A

public class B: A
{      
}

static void Main()
{
    A a = new A();
    B b = new B();
    Console.Write(a.dtA == b.dtA); //true
}
于 2013-03-05T09:45:35.433 に答える
0

refで試してください

public B(ref DataTable dt)
{
    dtB = dt;
}
于 2013-03-05T09:44:30.193 に答える
0

と の両方が同じAを指します。これは、すべての参照型 ( as ) が参照によって渡されるため、コードが正常に機能するためです。BDataTableDataTable

于 2013-03-05T09:44:31.457 に答える