我们可以在界面中使用字段事件吗? 我使用这个,我没有得到任何错误
class Program
{
public delegate string MyDelegate(string a);
public static void Main(string[] args)
{
}
public interface face
{
event MyDelegate ab;
}
}
答案 0 :(得分:9)
接口不能声明字段,但可以声明事件。
接口由方法,属性,事件,索引器或这四种成员类型的任意组合组成。接口不能包含常量,字段,运算符,实例构造函数,析构函数或类型。
有关如何在接口中声明事件然后在类中实现它的信息,请参阅本教程:
答案 1 :(得分:3)
当您在界面中声明事件或属性时,此不会声明任何字段。您可以根据需要实施活动或财产。这是一个例子:
使用System;
interface IFoo
{
int Count { get; set; }
event EventHandler SomeEvent;
}
class Foo : IFoo
{
public int Count
{
get
{
Console.WriteLine("Count.get called!");
return 0;
}
set
{
Console.WriteLine("Count.set called with value {0}", value);
}
}
public event EventHandler SomeEvent
{
add
{
Console.WriteLine("SomeEvent.add called");
}
remove
{
Console.WriteLine("SomeEvent.remove called");
}
}
}
class Test
{
static void Main()
{
IFoo f = new Foo();
int x = f.Count;
f.Count = 5;
f.SomeEvent += delegate {};
f.SomeEvent -= delegate {};
}
}
在这种情况下,IFoo
接口没有声明任何字段,实际上Foo
类也没有任何字段。
现在,这与在类中使用相同的声明时非常不同。例如:
class Bar
{
int Count { get; set; }
event EventHandler SomeEvent;
}
在这种情况下,编译器具有自动生成的字段来支持Count
属性和SomeEvent
事件,并为您创建适当的get / set / add / remove方法。
答案 2 :(得分:0)
我的猜测是他问他是否可以在接口中声明事件,这是可能的。虽然我会使用EventHandler或EventHandler来遵循某种标准。
答案 3 :(得分:-3)
public interface IEntity
{
int Id{get;set;}
string Name{get;set;}
}
您可以拥有自动属性形式的字段。在这种情况下,从IEntity派生的每个实体都必须拥有这些字段/属性。