很可能这是一件非常简单的事情,但我现在并不是真的理解它:
我有一些接口定义和一些基本实现,如:
public interface IA
{
IB B { set; get; }
}
public interface IB
{
IA A { set; get; }
}
public class TheA<T> : NotifyPropertyChangedBase, IA
{
public TheA()
{
var t = typeof(T);
}
public IB B { set; get; }
}
public class TheB : NotifyPropertyChangedBase, IB
{
public TheB(IA a)
{
A = a;
}
public IA A { set; get; }
}
我在退出代码0x800703e9时收到此错误消息,当我在Visual Studio(2015 Update 3)下使用这些类时,因为它是调试器问题,项目和构建信息:.Net fw.4.5.2,debug ,x86)就像这里:
static void Main(string[] args)
{
var a = new TheA<int>();
a.B = new TheB(a); // After this line the program fails, while debugging.
}
我已将generics标记添加到此问题中,因为此错误仅在我添加泛型参数后才出现。
问题: 是什么导致“程序'{prgrmnm}'已退出代码-2147023895(0x800703e9)。”错误在此示例中?
更新:
此错误应该是Visual Studio环境错误。由于代码本身运行。仅当VS尝试评估实例a
时,它才会失败。
更新II : 首先我认为继承没有相关性,因为没有直接调用,但调试器调用它。
public abstract class NotifyPropertyChangedBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public override string ToString()
{
var s = new StringBuilder();
foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(this))
{
string name = descriptor.Name;
object value = descriptor.GetValue(this);
s.AppendLine(string.Format("{0}={1}", name, value)); // This calls recursively itself... Ok
}
return s.ToString();
}
}
谢谢你的谈话。