我写了一个简单的类,如:
public class Pusher : IPusher,Hub
{
}
我得到编译错误(Interface definition is expected
),因为我们should首先从类继承,然后继承其他接口。
但public class Pusher : Hub,IPusher
和public class Pusher : IPusher,Hub
我们也可以在具有默认值
的方法参数中看到这种对流public void ExampleMethod(int required, string optionalstr = "default string")
我们应该定义参数的默认值参数。
这与CLR有关吗?
答案 0 :(得分:2)
不,它与CLR无关,这些是语言特定的限制。
我无法确切地找到为什么继承的类必须放在接口之前,但这可能是为了清楚起见。该类只能从另一个类继承,但它可以实现多个接口。如果您知道继承的类总是放在第一位,那么更容易看到发生了什么。
可选参数的排序更具实用性。 C#不允许空参数作为可选参数的占位符,因此您必须将它们放在最后(否则只能使用命名参数调用该方法)。你不能这样调用这个方法:
ExampleMethod(42, );
要使用可选值进行呼叫,只需在呼叫中省略它:
ExampleMethod(42);
因此,如果可选参数不是最后一个,那么它就不是可选的,因为你不能像这样调用:
ExampleMethod(, 42);
答案 1 :(得分:1)
嗯,在第一种情况下,它只是一个惯例。这个类应该是第一个为了更好的可读性和简单的编译时间检查我希望。 但争论是另一种情况。想象一下,您为第一个参数指定了默认值,而不是最新的参数。编译器应如何检测您想要说的内容。
实施例: int func(int a,int b = 10,int c) 你打电话给 func(10,20); 这该怎么办?这是不可能的。
编辑(示例2): int func(int a,int b = 1,int c,int d = 2,int e) 并调用 func(1,2,3,4); 在这种情况下,不清楚哪个变量已被省略。 它可以是B和D.