我正在学习如何在c#中使用自定义事件,但是我遇到了一些错误 我得到“粗体字
中的非静态字段,方法或属性需要对象引用”所以我尝试了this
但无法尝试案例1因为TypeChanged已经是非静态方法(我认为) 在案例2中,我“无法将BicycleType作为实例引用访问,将其限定为类型”
public class Bicycle
{
public event EventHandler TypeChanged;
private string type;
...
public string BicycleType {
get { return this.type; }
set {
this.type = value;
if (this.TypeChanged != null)
this.TypeChanged( this, new EventArgs() );
}
}
public Bicycle() {}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("heila!");
Bicycle istanza = new Bicycle();
istanza.TypeChanged += new EventHandler(**istanza_TypeChanged**);
istanza.BicycleType = "io";
Console.WriteLine("io");
}
void istanza_TypeChanged(object sender, EventArgs e) {
Console.WriteLine("rofkd");
}
}
我跟随的教程告诉我,我可以使用事件“as”方法,也许我在这里错了? 代码与te教程代码完全相似
抱歉我的英语不好,并提前致谢答案 0 :(得分:2)
当你从main方法注册事件时,它是静态的,事件处理程序(istanza_TypeChanged)也必须是静态的。
答案 1 :(得分:0)
您的问题是Main
是静态的,因此无法访问类Program
的非静态成员。但是,您尝试访问istanza_TypeChanged
。这就是造成你的例外的原因。
您必须使istanza_TypeChanged
静态以解决问题
class Program
{
static void Main(string[] args)
{
Console.WriteLine("heila!");
Bicycle istanza = new Bicycle();
istanza.TypeChanged += new EventHandler(**istanza_TypeChanged**);
istanza.BicycleType = "io";
Console.WriteLine("io");
}
static void istanza_TypeChanged(object sender, EventArgs e)
{
Console.WriteLine("rofkd");
}
}
答案 2 :(得分:0)
将istanza_TypeChanged
更改为以下内容:
private static void istanza_TypeChanged(object sender, EventArgs e)
{
Console.WriteLine("rofkd");
}
以下为我解雇了这个事件:
public class Bicycle
{
public event EventHandler TypeChanged;
private string type;
public string BicycleType
{
get { return this.type; }
set
{
this.type = value;
if (this.TypeChanged != null)
this.TypeChanged(this, new EventArgs());
}
}
public Bicycle()
{
}
private class Program
{
private static void Main(string[] args)
{
Console.WriteLine("heila!");
Bicycle istanza = new Bicycle();
istanza.TypeChanged += istanza_TypeChanged;
istanza.BicycleType = "io";
Console.WriteLine("io");
}
private static void istanza_TypeChanged(object sender, EventArgs e)
{
Console.WriteLine("rofkd");
}
}
}
答案 3 :(得分:0)
从非静态上下文注册事件或将事件更改为静态。