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;
}
需要注意的是,如果两个接口的属性访问器不同,就得取两个访问器的并集。例如:
热门推荐
产品经理如何画思维导图
三年级阅读课怎么上:高效提升小学生阅读能力的实用指南
金价挑战新高,海外大行发声
浙大多学科视角的清明……
夏天吃姜,胜过参汤!教您几种吃法,祛湿降暑、健脾益心,还不上火
世界睡眠日:守护孩子香甜梦乡,从关注儿童睡眠开始
人类有多渺小?看完地球在宇宙中的位置,才发现人类小到忽略不计
谷歌数字图书馆公益属性的法律界定与私利争议
印度股市长牛的秘诀:T+0交易、严格监管、良性的“回购文化”
见过这些型号机车,你就是资深铁路迷!
剪指甲的一个小习惯,可能导致甲沟炎反复发作!快看看中招没
《批判性思维》:我们如何识别虚假信息?
左旋多巴与维生素B6合用可能引起多种不良反应
1990年以来典型温和通缩案例及启示
“五一”假期水果争“鲜”上市 一张地图告诉你它从哪里来
解锁ISO45001:为职业健康安全保驾护航
多喝一口,增加45种疾病风险!运动也不能抵消伤害
如何合理调整马自达怠速?这一怠速的合理调整有哪些方法?
兰州大学最新研究:三种生活方式可延缓衰老,降低死亡风险达51%
地基回填土如何夯实
营业利润是什么
美团京东为外卖骑手缴纳五险一金:行业变革的里程碑
汽车启动系统常见故障诊断与检修
探索民兵的历史与现状:理解其在中国军事中的意义
企业法律顾问的作用与风险预防
鼓舞人心的文艺句子合集
道德伦理与人生选择
中考作文写作的技巧
佳能相机,如何查看快门次数?
二手相机如何了解成色?全解:助您明智购 “机”