从类和接口继承

本文关键字:继承 接口 | 更新日期: 2023-09-27 18:03:11

我写了一个简单的类,如:

public class Pusher : IPusher,Hub
{
}

我得到编译错误(Interface definition is expected),因为我们应该首先继承类,然后其他接口。

但是public class Pusher : Hub,IPusherpublic class Pusher : IPusher,Hub有什么区别

我们可以在方法参数中看到这样的对流也有默认值

public void ExampleMethod(int required, string optionalstr = "default string")

我们应该定义默认值parameter(参数中的最后一个)

与CLR有关吗?

从类和接口继承

不,这与CLR无关,这些是语言特定的限制。

我不能确切地找到为什么继承的类必须放在接口之前,但这样做可能是为了清晰。类只能继承另一个类,但它可以实现多个接口。如果知道被继承的类总是放在首位,就更容易看到发生了什么。

可选参数的排序具有更实用的性质。c#不允许空参数作为可选参数的占位符,所以你必须把它们放在最后(否则只能用命名参数调用方法)。你不能像这样调用这个方法:

ExampleMethod(42, );

使用可选值调用,只需从调用中省略它:

ExampleMethod(42);

因此,如果可选参数不是最后一个,它就不是可选的,因为你不能这样调用:

ExampleMethod(, 42);

在第一种情况下,这只是一种惯例。为了更好的可读性和简单的编译时检查,我希望这个类应该放在第一位。但争论是另一回事。假设您为第一个参数指定默认值,而不是为最后一个参数指定默认值。编译器应该如何检测你想说什么

的例子:int函数c(int a, int b = 10, int c)然后调用func(10,20);这是干什么用的?那是不可能的

编辑(例2):int funcc (int a, int b = 1, int c, int d = 2, int e)and call func(1,2,3,4);在这种情况下,不清楚哪个变量被省略了。可以是B和d。