谁能解释一下这段代码摘录。
public abstract Action<int> serialpacket { set; get; }
我对此有点困惑。我大致知道它的作用,但如果有人能稍微了解一下它会更好。
serialpacket
是一个抽象属性,在实现时将返回一个方法引用或 lamda,它接受一个整数参数并且不返回任何内容。
例如(忽略设置器)。
public override Action<int> serialpacket
{
get { return i => Console.WriteLine(i); }
set { ... }
}
或者
public void Trousers(int i)
{
Console.WriteLine(i);
}
public Action<int> serialpacket
{
get { return Trousers; }
set { ... }
}
然后可以这样使用serialpacket:
serialpacket(10);
因为它是一个带有 setter 的属性,所以也可以这样做:
public override Action<int> serialpacket { get; set; }
serialpacket = Trousers;
serialpacket(10);
// prints 10 to the console
同上定义Trousers
。
封装具有单个参数且不返回值的方法。
http://msdn.microsoft.com/en-us/library/018hxwa8.aspx
编辑:在您的示例中,它是您可以分配的属性(在派生类中 - 因为它是abstract
)一个接受int
并且不返回值的委托。
这是类型的属性Action<int>
。Action<int>
是一个接受int
参数但不返回值的函数。
您可以按如下方式使用它:
instance.serialpacket(42);
该属性是abstract
- 它必须在具体派生类中被覆盖。
abstract
拥有一个带有公共设置器的属性有点奇怪。可能更好的是只读属性:
public abstract Action<int> serialpacket { get; }
否则,如果属性可以公开设置,那么非抽象版本就足够了
public Action<int> serialpacket { get; set; }
您还可以将设置器限制为派生类:
public Action<int> serialpacket { get; protected set; }