接口
接口是指一组函数成员而不实现它们的引用类型。只有类是结构体实现接口。例如:
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.
标签:C#,void,接口,class,int,public,CSharpProject1
From: https://www.cnblogs.com/lilyflower/p/17965328