问一个想不明白的问题,大神们请给个解答,万分感谢.
代码如下: 红色的注释有问题,能给解答么?private void button1_Click(object sender, EventArgs e)
{
Test t = new Test();
t.PID = "SSSS";
ITest i = t;
i.Pro.ID = "AAAAA";//为什么这里的"AAAAA"没有赋值,跑哪里去了?
MessageBox.Show(i.Pro.ID);
}
public class Property
{
public string ID { get; set; }
public string Name { get; set; }
}
public interface ITest
{
Property Pro { get; set; }
}
public class Test : ITest
{
public string PID { get; set; }
public string PName { get; set; }
#region ITest 成员
Property p = new Property();
Property ITest.Pro
{
get
{
p.ID = this.PID;
p.Name = this.PName;
return p;
}
set
{
p = value;
this.PID = p.ID;
this.PName = p.Name;
}
}
#endregion
} --------------------编程问答-------------------- 这俩ID没一毛钱关系啊 --------------------编程问答-------------------- 貌似有点乱,再看看 --------------------编程问答-------------------- 不知道你的具体问题是什么情况。 --------------------编程问答-------------------- 原因出在Get属性中
--------------------编程问答-------------------- 虽然你赋值了。但是在get的时候,你又把p.ID的值给改了。
public Property Pro
{
get
{
p.ID = this.PID;
p.Name = this.PName;
return p;
}
set
{
p = value;
this.PID = p.ID;
this.PName = p.Name;
}
}
可能你接触编程(不仅仅是C#)不长,应该对这些基本概念有一定的了解(而不是理解),所以才会写出这样的代码。呵呵买本C#高级编程之类的书籍好好研究一下吧。别迷失在繁杂的应用中 --------------------编程问答-------------------- i 的pro是在哪里赋值的呢?如果你说test创建后自动称生成了,起码这句话
Property p = new Property();应该放在构造函数里啊
逻辑混乱,帮你改了下
private void button2_Click(object sender, EventArgs e)
{
Test t = new Test();
t.PID = "SSSS";
ITest i = t;
i.Pro.ID = "AAAAA";
MessageBox.Show(i.Pro.ID);
}
public class Property
{
public string ID { get; set; }
public string Name { get; set; }
}
public interface ITest
{
Property Pro { get; set; }
}
public class Test : ITest
{
Property p;
public string PID { get; set; }
public string PName { get; set; }
public Test()
{
p = new Property();
}
#region ITest 成员
Property ITest.Pro
{
get
{
p.ID = this.PID;
p.Name = this.PName;
return p;
}
set
{
p = value;
this.PID = p.ID;
this.PName = p.Name;
}
}
#endregion
}
--------------------编程问答-------------------- 4L的回答是正解
关键是这里t.PID = "SSSS";
--------------------编程问答-------------------- 呵呵,看到楼主的帖子,想起自己当年开始学编程的日子了。
楼主加油 --------------------编程问答-------------------- 可能让大家迷惑了.我写C#也好几年了.只不过最近才经常用接口显式实现.并且对我们程序的作用很大.
目的是A类显示继承一个接口I ,B类正常实现接口I ,希望在A类得实例中看不到I接口的内容,而当将A转换成I接口类型时候只看到接口I的属性.这样就达到了A类和B类之间的关系就是I,所以可以利用反射属性的方法,将A类和B类同时实现I接口的属性进行相互赋值.方法提供参数如果是B类型,就可以用I接口来代替,而实际传递的时候,用A类得实例传递即可.这样目的是分割A类和B类的关系,也就是说,A可以不认识B,但是一样可以进行属性传递.降低程序的耦合性.
在这个过程中,发现如果I中接口定义的属性如果类型大于B中对应属性的类型或者跟对应的属性类型不一致,就会出现例子中的问题.
补充:.NET技术 , C#