我是c#开发的新手.我只是想研究代表功能.根据我阅读的有关代表的文章和说明,我尝试根据我从这些说明和文章中理解的内容编写示例代码来实现委托.
但是我在运行示例时遇到错误
"你调用的对象是空的."
这里有什么问题 ?.或者我是否以正确的方式实施了代理?或者我关于代表的概念是错的吗?
请帮忙.提前致谢.
我在下面发布了我的代码.
default.aspx.cs
public partial class _Default : System.Web.UI.Page
{
TestClass myObject = new TestClass();
protected void Page_Load(object sender, EventArgs e)
{
myObject.MyDelegateEvent += new TestClass.MyDelegate(myObject_MyDelegateEvent);
}
void myObject_MyDelegateEvent(object sender, EventArgs e)
{
Console.WriteLine("Delegate event called");
}
}
Run Code Online (Sandbox Code Playgroud)
识别TestClass
public class TestClass
{
public delegate void MyDelegate(object sender, EventArgs e);
public event MyDelegate MyDelegateEvent;
public TestClass()
{
MyDelegateEvent(this, null); // Here getting error "Object reference not set to an instance of an object."
}
}
Run Code Online (Sandbox Code Playgroud)
您正在尝试的是:在构造函数本身中提升事件,即在您的事件没有订阅者时,因此MyDelegateEvent为null.
最好的选择是在举起活动前进行空检查
//Check for not null
if(MyDelegateEvent != null)
{
MyDelegateEvent(this, null);
}
Run Code Online (Sandbox Code Playgroud)