最近在B站刷视频的时候刷到了一个C#冷知识系列的视频,恰好最近从头开始看官方文档,就想着把他整理成文档当作自己的随笔。
视频链接:C# 的一些冷知识
这边不考虑性能什么方面的问题,只是分享,可能用不到到但是不能不知道。
函数的传参
先来一个一般正常函数的示例:
// 正常传参调用函数 (位置传参,参数和函数声明的参数要一一对应)
Foo("Tom", 18, true); // output: Tom, 18, True
// 定义一个函数 Foo
void Foo(string name, int age, bool alive) =>
Console.WriteLine($"{name},{age},{alive}");
现在我们试试命名参数来进行调用函数:
Foo(name:"Tom", age:18, alive:true); // output: Tom, 18, True
适用场景
看上面的示例感觉更麻烦了这样有意义吗?
当然有,有些函数的形参是有默认值的例如:
void Foo(string name, int age = 18, bool alive = true) =>
Console.WriteLine($"{name},{age},{alive}");
我现在只想传输 name
和 alive
这两个参数的时候我们可以利用命名参数来跳过传输 age
这个参数。示例:
Foo("Tom", alive:false); // output: Tom, 18, False
// 在 命名参数 后面还可以使用 位置参数 如下
Foo("Tom", age:23, true); // output: Tom, 23, True
官方文档链接:命名实参和可选实参
枚举类型的数据格式
默认情况下,枚举成员的关联常数值为类型 int
;它们从零开始,并按定义文本顺序递增 1。可以显式指定任何其他整数数值类型作为枚举类型的基础类型。 还可以显式指定关联的常数值,如下面的示例所示:
enum ErrorCode : ushort
{
None = 0,
Unknown = 1,
ConnectionLost = 100,
OutlierReading = 200
}
// 又或者
enum ErrorCode : byte
{
None = 0x01,
Unknown,
ConnectionLost,
OutlierReading
}
能使用的类型有:byte
、sbyte
、short
、ushort
、int
、uint
、long
或 ulong
。
详细参见官方文档:枚举类型
显式实现接口
我们知道一个类是可以继承多个接口的,但是有种情况:如果一个类实现的两个接口包含签名相同的成员这时后我们该这么办呢?
这时后我们就可以使用显式实现接口的方式来实现接口:
public interface IControl
{
void Paint();
}
public interface ISurface
{
void paint();
}
public class SampleClass : IControl, ISurface
{
// 这时候 IControl 和 ISurface 的 paoint 的实现都是这个
public void Paint()
{
Console.WriteLine("Paint method in SampleClass");
}
}
调用:
SampleClass sample = new SampleClass();
IControl control = sample;
ISurface surface = sample;
// 下面几行都调用的同样的方法。
sample.Paint();
control.Paint();
surface.Paint();
但你可能不希望为这两个接口都调用相同的实现。 若要调用不同的实现,根据所使用的接口,可以显式实现接口成员。
public class SampleClass : IControl, ISurface
{
// 显式接口实现不需要修饰符
void IControl.Paint()
{
System.Console.WriteLine("IControl.Paint");
}
void ISurface.Paint()
{
System.Console.WriteLine("ISurface.Paint");
}
}
这时候调用:
SampleClass sample = new SampleClass();
IControl control = sample;
ISurface surface = sample;
//sample.Paint(); // Compiler error.
control.Paint();
surface.Paint();
详细参见官方文档:显式接口实现
标签:里面,C#,知识,IControl,接口,sample,Paint,Tom,ISurface From: https://www.cnblogs.com/Honesty-is-the-best-policy/p/17040763.html