关于Interface 和 abstrac 的理解

本文探讨了C#中Interface和Abstract类的区别和应用场景。通过示例展示了如何实现接口和抽象类,强调了接口适用于强制实现特定行为,而抽象类则用于提供部分实现和共享基类。文章还解释了显式接口实现的情况,以及抽象方法的特点。最后,通过汽车类的示例说明了如何根据设计需求选择使用接口或抽象类。
摘要由CSDN通过智能技术生成

我相信有许多同行对于interface和abstract的理解都各不一样,我想说说我个人的理解:

先说最基本概念:

一:interface(接口)

      定义:接口只包含方法,属性,事件或索引器的签名。实现接口的类或者结构必须实现接口定义中指定的接口成员;

注意事项:

1. 不允许使用访问修饰符(public, private, protected,或者internal)修饰接口成员,所有的接口成员都是公共的。
2. 实现接口的类必须实现接口中的所有的方法
3. 接口不能定义字段成员,不能用关键字static,virtual,abstract或者sealed来定义接口成员
4. 不能实例化接口,但接口可以作为字段出现在其他类中,一个类可以实现多个接口,一个接口可以从一个或多个接口继承
5.实现接口的类可以显式实现该接口的成员。 显式实现的成员不能通过类实例访问,而只能通过接口实例访问。

举例说明:

        下面的例子演示了属性的声明,类中包含实现,实现类的任何实例都具有声明的属性:

interfaceIPoint
{
   // Property signatures:
   int x
   {
      get;
      set;
   }

   int y
   {
      get;
      set;
   }
}

classPoint :IPoint
{
   // Fields:
   privateint _x;
   privateint _y;

   // Constructor:
   publicPoint(int x,int y)
  
{
      _x = x;
      _y = y;
   }

   // Property implementation:
   publicint x
   {
      get
      {
         return _x;
      }

      set
      {
         _x = value;
      }
   }

   publicint y
   {
      get
      {
         return _y;
      }
      set
      {
         _y = value;
      }
   }
}
索引器的例子:
publicinterfaceISomeInterface
{
    //声明索引器
    intthis[int index]
    {
        get;
        set;
    }
}

// 实现接口
classIndexerClass :ISomeInterface
{
    privateint[] arr =newint[100];
    publicintthis[int index]
    {
        get
        {
            return arr[index];
        }
        set
        {
            arr[index] = value;
        }
    }
}

classMainClass
{
    staticvoidMain()
   
{
        IndexerClass test = new IndexerClass();
        System.Random rand = new System.Random();
       
        for (int i =0; i <10; i++)
        {
            test[i] = rand.Next();
        }
        for (int i =0; i <10; i++)
        {
            System.Console.WriteLine("Element #{0} = {1}", i, test[i]);
        }

     
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();
    }
}

方法和事件的例子就不再写了,大家肯定用的挺多的...

什么是显示接口实现呢?请看这个例子:

如果一个实现的两个接口包含签名相同的成员,则在该类上实现此成员会导致这两个接口将此成员用作其实现。 如下示例中,所有对 Paint 的调用皆调用同一方法。

classTest
{
   
staticvoidMain()
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值