我们可以在界面中使用字段事件吗?

时间:2010-09-24 12:12:44

标签: c#

我们可以在界面中使用字段事件吗? 我使用这个,我没有得到任何错误

class Program
{
    public delegate string MyDelegate(string a);
     public  static void Main(string[] args)
    {

    }
   public interface face
   {
       event MyDelegate ab;

  }
}

4 个答案:

答案 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派生的每个实体都必须拥有这些字段/属性。