首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >操作属性

操作属性
EN

Stack Overflow用户
提问于 2013-02-28 22:37:59
回答 3查看 8.6K关注 0票数 1

谁能给我解释一下这个代码摘录。

代码语言:javascript
运行
复制
public abstract Action<int> serialpacket { set; get; }

我对此有点困惑。我大致知道它是做什么的,但如果有人能稍微解释一下,那就更好了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-28 22:40:34

serialpacket是一个抽象属性,在实现时,它将返回一个方法引用或lamda,后者接受一个整数参数,但不返回任何内容。

例如(忽略setter)。

代码语言:javascript
运行
复制
public override Action<int> serialpacket
{
    get { return i => Console.WriteLine(i); }
    set { ... }
}

代码语言:javascript
运行
复制
public void Trousers(int i)
{
   Console.WriteLine(i);
}

public Action<int> serialpacket
{
    get { return Trousers; }
    set { ... }
}

这样就可以使用序列包了:

代码语言:javascript
运行
复制
serialpacket(10);

因为它是一个带有setter的属性,所以也可以这样做:

代码语言:javascript
运行
复制
public override Action<int> serialpacket { get; set; }

serialpacket = Trousers;
serialpacket(10);
// prints 10 to the console

具有与上面相同的Trousers定义。

票数 4
EN

Stack Overflow用户

发布于 2013-02-28 22:39:54

封装只有一个参数且不返回值的方法。

http://msdn.microsoft.com/en-us/library/018hxwa8.aspx

编辑:在您的示例中,它是一个属性,您可以(在派生类中-因为它是abstract)为其分配一个接受int且不返回值的委托。

票数 0
EN

Stack Overflow用户

发布于 2013-02-28 22:40:24

这是Action<int>类型的属性。Action<int>是一个接受int参数并且不返回值的函数。

您可以按如下方式使用它:

代码语言:javascript
运行
复制
instance.serialpacket(42);

该属性为abstract -它必须在具体的派生类中被重写。

有一个带有公共setter的abstract属性有点奇怪。更好的方法可能是只读属性:

代码语言:javascript
运行
复制
public abstract Action<int> serialpacket { get; }

否则,如果该属性可以公开设置,那么非抽象版本就足够了

代码语言:javascript
运行
复制
public Action<int> serialpacket { get; set; }

您还可以将setter限制为派生类:

代码语言:javascript
运行
复制
public Action<int> serialpacket { get; protected set; }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15138195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档