c#中如何传递引用数据表
本文关键字:引用 数据表 何传递 | 更新日期: 2023-09-27 18:02:22
我在c#项目工作
我有两个这样的类:
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);
}
I Want that dtB Be Exactly dtA (ref dtA)。但是在Up Code中,dtB是New DataTable,而不是dtA。(我想当更改dtB时,此更改也适用于dtA)
如何解决我的问题?
解决:
如果dtA为空并传递给dtB,则dtB将始终为空。(即使dtA填充了数据)但如果dtA不为空并传递给dtB,则dtB和dtA将来自一个源。
你的代码可以正常工作,因为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仍然指向旧的引用,因此两者不再相同。查看Tim Schmelter的答案,以获得更好的方法。
try with ref
public B(ref DataTable dt)
{
dtB = dt;
}
A
和B
都指向相同的DataTable
,这是因为所有的引用类型(如DataTable
)都是通过引用传递的,所以你的代码应该工作得很好
如果你想使用相同的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
}