C#接口使用完全指南:从基础到高级特性
创作时间:
作者:
@小白创作中心
C#接口使用完全指南:从基础到高级特性
引用
1
来源
1.
https://www.cnblogs.com/asyaB404/p/18261044
本文对C#接口的使用进行了全面总结,包括基本使用、属性、事件、默认实现、显式实现以及多个接口同名方法的处理等。通过多个示例代码详细解释了C#接口的各种用法,适合C#开发者阅读。
C#的接口(interface)
早期对接口的认识仅限于方法签名的使用,但随着学习的深入,接口的功能越来越接近抽象类。
1.最基本的使用
接口主要用于提供公共方法。以下是一个玩家交互判断的例子:
public interface IPlayerInteraction
{
void Interact();
}
public class Player : IPlayerInteraction
{
public void Interact()
{
Console.WriteLine("Player is interacting.");
}
}
接口也支持使用泛型。例如:
public interface IGenericInterface<T>
{
T Process(T input);
}
public class GenericClass : IGenericInterface<string>
{
public string Process(string input)
{
return input.ToUpper();
}
}
另外需要注意的是,C#中接口(interface)中的方法默认是public的。如果你不指定任何访问修饰符,接口中的方法隐式地是public。
2.接口上使用属性
接口中的属性定义类似于方法的定义,但接口属性不包含访问器的实现,而是只声明属性的存在。实现接口的类必须提供这些属性的实现。
例如:
public interface INameProvider
{
string Name { get; set; }
}
public class Person : INameProvider
{
public string Name { get; set; }
}
3.接口上使用事件
在接口中定义事件类似于定义方法和属性,接口仅声明事件,不包含事件的实现。实现接口的类必须提供这些事件的实现。
例如:
public interface IEventProvider
{
event EventHandler SomeEvent;
}
public class EventRaiser : IEventProvider
{
public event EventHandler SomeEvent;
public void RaiseEvent()
{
SomeEvent?.Invoke(this, EventArgs.Empty);
}
}
4.接口上默认实现
C#8.0开始,接口支持了默认实现,使得接口不仅仅是方法签名的集合,还可以提供实际的方法实现。接口默认实现的引入使得接口的演变更加灵活,同时可以减少破坏性更改。
例如:
public interface IDefaultImplementation
{
void Fun() => Console.WriteLine("Default implementation");
}
public class MyClass : IDefaultImplementation
{
// MyClass实例可以直接使用Fun方法
// 但是需要将对象显式转换为接口类型才能使用默认实现
public void Test()
{
((IDefaultImplementation)this).Fun();
}
}
但需要注意,如果在实现类里"重写"了默认方法,那么原来的默认方法将会被彻底覆盖。
5.接口上显式实现
显式接口实现用于解决接口成员命名冲突或隐藏接口成员,使得这些成员只能通过接口引用来访问。
例如:
public interface IDamageable
{
void Damage(int amount);
}
public interface IScarecrow : IDamageable
{
void Damaged(int amount);
}
public class Scarecrow : IScarecrow
{
void IDamageable.Damage(int amount)
{
// 稻草人不能攻击,所以这个方法可以留空或抛出异常
}
public void Damaged(int amount)
{
Console.WriteLine($"Scarecrow was damaged by {amount} points.");
}
}
显式实现接口的方法不能使用修饰符,因为显式实现的成员在类的实例上是不可见的,它们的访问是通过接口引用来控制的。
6.多个接口的同名方法或属性的处理
当一个类实现多个接口且这些接口包含同名的属性或方法时,可以通过显式接口实现来解决命名冲突。这种方式允许一个类为每个接口提供单独的实现,从而避免冲突和歧义。
例如:
public interface INumProvider1
{
int Num { get; set; }
}
public interface INumProvider2
{
int Num { get; }
}
public class MyClass : INumProvider1, INumProvider2
{
int INumProvider1.Num
{
get => this.num;
set => this.num = value;
}
int INumProvider2.Num => this.num;
private int num;
}
需要注意的是,如果两个接口的属性访问器不同,就得取两个访问器的并集。例如:
热门推荐
黄豆炖猪蹄:一碗汤里的美容秘方
选择合适镜头焦段,提升抖音短视频拍摄效果的小贴士
手擀饺子皮虽好吃,但却又累又慢?饺子店主教你3招,又快...
每日营养摄入量计算:从基础代谢到实际应用
营养与食品卫生学期末考回顾与前瞻,知识梳理与未来展望
雾游太姥山
《等着我》:抗战老兵的寻亲路与现代慈孝的新诠释
曾有娣:亿万富翁的寻亲之路
主持人变更后,《等着我》为何停播?
胃部健康大揭秘:胆汁反流性胃炎的真相
专家详解:胆汁反流性胃炎的科学应对方案
胆汁反流性胃炎患者的“心理战”
钨钢应用行业有哪些
钨钢轧辊的应用行业有哪些?
钨钢:一种高性能的合金材料
人工耳蜗:重获新生的听力奇迹
上海微创推出全球首款全植入人工耳蜗,或将为耳鸣治疗带来新突破
全国爱耳日:专家解读耳鸣治疗新进展
战国四大名将:白起、李牧、王翦、廉颇,谁才是顶级名将?
百家争鸣:古代中国思想文化的集大成
先秦诸子百家之纵横家学派
吴起:战国兵家的杰出代表与《吴子兵法》的作者
赵露思“失语了”,但他们却仍在争吵
赵露思微博已公开可见,病后首度公开露面
古诗词个性签名,让你秒变文艺青年
书法签名新潮流:让你的签名更有范儿
冬季食管炎高发,这些饮食注意事项请收好
胃食管反流患者的饮食秘籍
食管炎患者的饮食禁忌与实用建议
反流性食管炎患者的饮食秘籍