积极答复者
n个不同数量成员,但相同的成员名有相同的类型,它们互相能够相互赋值吗?

问题
-
如果我新建n个类或结构,想让他们的实例可以互相赋值。
struct A { public int a1; public char a2; public datetime a3; } class B { public int a1; public char a2; public datetime a3; } .................................................. { A S_A=new A(); B S_B=new B(); S_A.a1=0; S_A.a2='c'; S_A.a3=convert.todatetime("2011-06-24"); S_B=S_A; //这样可以把 S_A的各值赋值到S_B吗? } 如果,其它同上,但: class B { public int a1; public char a2; public datetime a3; public string a4; } 那么: S_B=S_A; //能赋值吗? 如果不能,我该怎么做?
答案
-
如果我新建n个类或结构,想让他们的实例可以互相赋值。
struct A { public int a1; public char a2; public datetime a3; } class B { public int a1; public char a2; public datetime a3; } .................................................. { A S_A=new A(); B S_B=new B(); S_A.a1=0; S_A.a2='c'; S_A.a3=convert.todatetime("2011-06-24"); S_B=S_A; //这样可以把 S_A的各值赋值到S_B吗? } 如果,其它同上,但: class B { public int a1; public char a2; public datetime a3; public string a4; } 那么: S_B=S_A; //能赋值吗? 如果不能,我该怎么做?
当然不能,因为类之间如果没有任何关系,那么直接赋值肯定是出错的。如果你要赋值,那么除非你使用“隐式转换”——namespace TestConsoleApplication1
{
struct A
{
public int a1;
public char a2;
public DateTime a3;
}class B
{
public int a1;
public char a2;
public DateTime a3;public static implicit operator B(A a)
{
B b = new B();
b.a1 = a.a1;
b.a2 = a.a2;
b.a3 = a.a3;
return b;
}
}class Program
{
static void Main(string[] args)
{
A S_A = new A();
B S_B = new B();S_A.a1 = 0;
S_A.a2 = 'c';
S_A.a3 = DateTime.Now;S_B = S_A;
}
}
}
如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请
下载MSDN桌面工具(Vista,Win7)
下载Technet桌面小工具(Vista,Win7)
慈善点击,点击此处- 已标记为答案 OpenNovo 2011年6月27日 6:31
-
如果我转回来,S_A=S_B,是否在A中也要增加这样的隐式转换?
当然!你可以尝试做做看呢!
如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请
下载MSDN桌面工具(Vista,Win7)
下载Technet桌面小工具(Vista,Win7)
慈善点击,点击此处- 已标记为答案 OpenNovo 2011年6月27日 6:31
-
抱歉,我也想尝试做做看,但我一般没构思好之前,很少动手。我怕逻辑不到位,反而不知如何下去。
struct A
{
public int a1;
public char a2;
public DateTime a3;
public static implicit operator A(B b)
{
A a = new A();
a.a1 = b.a1;
a.a2 = b.a2;
a.a3 = b.a3;
return a;
}
}
如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请
下载MSDN桌面工具(Vista,Win7)
下载Technet桌面小工具(Vista,Win7)
慈善点击,点击此处- 已标记为答案 OpenNovo 2011年6月27日 6:31
全部回复
-
如果我新建n个类或结构,想让他们的实例可以互相赋值。
struct A { public int a1; public char a2; public datetime a3; } class B { public int a1; public char a2; public datetime a3; } .................................................. { A S_A=new A(); B S_B=new B(); S_A.a1=0; S_A.a2='c'; S_A.a3=convert.todatetime("2011-06-24"); S_B=S_A; //这样可以把 S_A的各值赋值到S_B吗? } 如果,其它同上,但: class B { public int a1; public char a2; public datetime a3; public string a4; } 那么: S_B=S_A; //能赋值吗? 如果不能,我该怎么做?
当然不能,因为类之间如果没有任何关系,那么直接赋值肯定是出错的。如果你要赋值,那么除非你使用“隐式转换”——namespace TestConsoleApplication1
{
struct A
{
public int a1;
public char a2;
public DateTime a3;
}class B
{
public int a1;
public char a2;
public DateTime a3;public static implicit operator B(A a)
{
B b = new B();
b.a1 = a.a1;
b.a2 = a.a2;
b.a3 = a.a3;
return b;
}
}class Program
{
static void Main(string[] args)
{
A S_A = new A();
B S_B = new B();S_A.a1 = 0;
S_A.a2 = 'c';
S_A.a3 = DateTime.Now;S_B = S_A;
}
}
}
如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请
下载MSDN桌面工具(Vista,Win7)
下载Technet桌面小工具(Vista,Win7)
慈善点击,点击此处- 已标记为答案 OpenNovo 2011年6月27日 6:31
-
如果我转回来,S_A=S_B,是否在A中也要增加这样的隐式转换?
当然!你可以尝试做做看呢!
如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请
下载MSDN桌面工具(Vista,Win7)
下载Technet桌面小工具(Vista,Win7)
慈善点击,点击此处- 已标记为答案 OpenNovo 2011年6月27日 6:31
-
如果我转回来,S_A=S_B,是否在A中也要增加这样的隐式转换?
当然!你可以尝试做做看呢!
如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请
下载MSDN桌面工具(Vista,Win7)
下载Technet桌面小工具(Vista,Win7)
慈善点击,点击此处 -
抱歉,我也想尝试做做看,但我一般没构思好之前,很少动手。我怕逻辑不到位,反而不知如何下去。
struct A
{
public int a1;
public char a2;
public DateTime a3;
public static implicit operator A(B b)
{
A a = new A();
a.a1 = b.a1;
a.a2 = b.a2;
a.a3 = b.a3;
return a;
}
}
如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请
下载MSDN桌面工具(Vista,Win7)
下载Technet桌面小工具(Vista,Win7)
慈善点击,点击此处- 已标记为答案 OpenNovo 2011年6月27日 6:31