C#中的接口
接口
接口是指一组函数成员而不实现它们的引用类型。只有类是结构体实现接口。例如:
namespace CSharpProject1;
interface IInfo
{
string GetName();
int GetAge();
}
class CA : IInfo
{
public string Name;
public int Age;
public string GetName()
{
return Name;
}
public int GetAge()
{
return Age;
}
}
class CB : IInfo
{
public string Name;
public int Age;
public int Sex;
public string GetName()
{
return Name;
}
public int GetAge()
{
return Age;
}
}
class Program
{
static void Main(string[] args)
{
CA ca = new CA() {Name = "lily", Age = -1};
CB cb = new CB() {Name = "lilys", Age = -2, Sex = 1};
}
}
声明接口
在接口声明中不能包含以下成员:
- 数据成员
- 静态成员
在接口中,函数成员的声明不能包含任何实现代码,必须使用分号代替每一个成员声明的主体。
按照惯例,接口名称必须从大写的I开始(比如IService)。与类和接口一样,接口声明也可以分割成分部接口声明;
接口默认访问修饰符为public。
实现接口
关于实现接口,这里有一些重要的事情:
- 如果类实现了接口,它必须实现接口的所有成员。
- 如果类派生基类并实现了接口,基类列表中的基类名称必须放在所有接口之前(基类放在接口前面),例如:
class SubClass:BaseClass1, Interface1,Interface2...
{
...
}
接口是引用类型
例如:
namespace CSharpProject1;
interface ISpeak
{
void Say();
}
class Cat: ISpeak
{
public void Say()
{
Console.WriteLine("cat speak...");
}
}
class Program
{
static void Main(string[] args)
{
ISpeak cat = new Cat();
cat.Say();
}
}
D:/RiderProjects/CSharpProject1/CSharpProject1/bin/Debug/net8.0/CSharpProject1.exe
cat speak...
Process finished with exit code 0.
实现具有重复成员的接口
如果一个类实现了多个接口,并且其中一些接口成员具有相同的方法和返回类型,那么类可以以接口名.方法实现成员来满足包含重复成员的接口,例如:
interface IF1
{
void Say();
}
interface IF2
{
void Say();
}
class Cat: IF1, IF2
{
void IF1.Say()
{
}
void IF2.Say()
{
}
}
接口可以继承接口,也可以继承多个接口
例如:
namespace CSharpProject1;
interface IDataRetrieve
{
int GetData();
}
interface IDataStore
{
void SetData(int x);
}
interface IDataIO:IDataRetrieve, IDataStore
{
}
class MyData : IDataIO
{
private int data;
public int GetData()
{
return data;
}
public void SetData(int x)
{
data = x;
}
}
class Program
{
static void Main(string[] args)
{
MyData md = new MyData();
md.SetData(10);
Console.WriteLine($"{md.GetData()}");
}
}
D:/RiderProjects/CSharpProject1/CSharpProject1/bin/Debug/net8.0/CSharpProject1.exe
10
Process finished with exit code 0.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律