欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > C# 继承(接口)

C# 继承(接口)

2025/4/20 5:00:42 来源:https://blog.csdn.net/weixin_42291376/article/details/145095725  浏览:    关键词:C# 继承(接口)

接口

如果一个类派生与一个接口,它就会执行某些函数。并不是所有的面向对象语言都支持接口。
熟悉COM的开发人员应注意,尽管在概念上C#接口类似于COM接口,但他们是不筒的,底层的结构不筒。比如,C#接口并不派生于IUnkown。C#接口根据.NET函数提供一个契约。于COM接口不同,C#接口不代表任何类型的二进制标准。Microsoft预定义的一个接口System.IDisposable的完整定义。IDisposable包含一个方法Dispose(),该方法由类执行,用于清理代码:

public interface IDisposable
{void Dispose();
}

从上述代码可知,声明接口在语法上于声明抽象类完全相同,但不允许提供接口中任何成员的执行方式。一般情况下,接口中只包含方法、属性、索引器和事件的声明。在接口定义中还不允许声明成员上的修饰符。接口成员总是公共的,不能声明为虚拟或静态。如果需要,就应执行的类来声明,最好通过执行的类来声明访问修饰符,就像上面的代码。

定义和实现接口

定义IBank接口:

namespace Wrox.ProCSharp
{public interface IBankAccount{void PlayIn(decimal amount);bool Withdraw(decimal amount);decimal Balance{get;}}
}

注意,接口的名称为IBankAccount。接口名称传统上以字母I开头,一遍知道这是一个接口。

namespace Wrox.ProCSharp.VenusBank
{public class SaverAccount:IBankAccount{private decimal balance;public void PayIn(decimal amount){balance+=amount;}public bool Withdraw(decimal amount){if(balance>amount){balance-=amount;return true;}Console.WriteLine("Withdrawal attempt failed.");return false;}public decimal balance{get{return balance;}}public override string ToString(){return string.Format("Venus Bank Saver:Balance={0,6:C}",balance);}}
}

上述代码中,包含一个私有字段balance,当存款或取款时就调整这个字段。在上述代码中,唯一有趣的类时声明:

public class SaverAccount:IBankAccount

SaverAccount派生于一个接口IbankAccount,没有明确指出任何其他基类(当然这表示SaverAccount直接派生于System.Object)。另,从接口中派生完全独立于从类中派生。SaverAccount派生于IBankAccount,表示它获取IBankAccount的所有成员,但接口并不是实际实现其方法,所以SaverAccount必须提供这些方法的所有实现代码。如果没有提供实现那代码,编译器会报错。接口仅表示其成员的存在性,类负责确定这些成员是虚拟还是抽象的(但只有在类本身是抽象的,这些成员才能是抽象的)。
不同类如何实现相同的接口。

namespace Wrox.ProCSharp.JupiterBank
{public class GoldAccount:IBankAccount{//etc.}
}

示例

using System;
using Wrox.PrCSharp
using Wrox.ProCSharp.VenusBank;
using Wrox.ProCSharp.JupiterBak;namespace Wrox.ProCSharp
{class MainEntryCSharp{static void Main(){IBankAccount venusAccount=new SaverAccount();IBankAccount jupiterAccount=new GoldAccount();venusAccount.PayIn(200);venusAccount.Withdraw(100);Console.WriteLine(venusAccount.ToString());jupiterAccount.PayIn(500);jupiterAccount.Withdraw(600);jupiterAccount.Withdraw(100);Console.WriteLine(jupiterAccount.ToString());}}}

接口引用完全可以看做是类引用——但接口引用的强大之处在于,它可以引用任何实现该接口的类。

派生的接口

接口可以彼此继承,其方式与类的继承相同。

本文由mdnice多平台发布

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词