问题列表 - 第6161页

在IDisposable类层次结构中正确处理ObjectDisposedException

正确实现IDisposable时,大多数实现(包括框架指南)都建议包含一个private bool disposed;成员,以便安全地允许多次调用Dispose(),Dispose(bool)并在适当时抛出ObjectDisposedException.

这适用于单个类.但是,当您从可支配资源中继承子类,并且子类包含其自己的本机资源和唯一方法时,事情会变得有点棘手.大多数示例都展示了如何Dipose(bool disposing)正确覆盖,但不要超出处理范围ObjectDisposedException.

在这种情况下,我有两个问题.


第一:

子类和基类都需要能够跟踪处置状态.我知道有几个主要选项 -

  • 1)声明私人布尔处置; 在这两个班级.每个类跟踪它自己的this.disposed,并根据需要抛出.

  • 2)使用protected bool Disposed {get; 私人集; 而不是一个字段.这将让子类检查处置状态.

  • 3)提供一些受保护的辅助方法来检查处理状态,如果对象被处理,则通过反射拉动当前类型名称来抛出.

我看到每个选项的优点是:

  • 1)这对我来说"闻到",因为它包含重复的布尔值,但似乎工作正常.我经常在子类化其他代码时使用它.

  • 2)这取出了重复的布尔值,但不是设计指南书的编写方式等.这是我通常使用的,因为它使状态保持单一点.

  • 3)这对我来说似乎是最干净的选择,但没有出现在标准指南中.对于来自该类用户的其他方法,可能对方法的预期稍差.

在某些方面,我尝试过使用这三种方法.我想知道这三种方法的优点和缺点,以及任何其他想法,以更清洁,更好的方式来处理这个问题.你在处理这个问题时会做出什么选择?为什么?


第二:

抛出时ObjectDisposedException,你对name参数使用了什么?我知道"典型"方法调用是:

throw new ObjectDisposedException(GetType().FullName);

Microsoft员工在此页面上发表评论,建议实施具体类的全名是适当的用法.

在上面的第三个选项中,这将是唯一有意义的选择.但是,如果类实现了throw本身,则可能会返回定义被调用方法的类的名称.(即:基类可以返回基类的名称,而不是具体的子类)

我认为这不是一个好主意 - 但我在其他人编写的代码上遇到了这个问题.使实现方法的类的名称返回有优缺点吗?

.net c# idisposable

12
推荐指数
1
解决办法
9568
查看次数

优化Lucene性能

优化Lucene性能的各种方法有哪些?

我应该使用缓存API来存储我的lucene搜索查询,以便节省再次构建查询的开销吗?

lucene lucene.net

24
推荐指数
3
解决办法
2万
查看次数

你如何在穆斯创建子类型?

我刚刚开始使用驼鹿.

我正在创建一个简单的通知对象,并希望检查输入是否为"电子邮件"类型.(暂时忽略简单的正则表达式匹配).

从文档中我相信它应该类似于以下代码:

# --- contents of message.pl --- #
package Message;
use Moose;

subtype 'Email' => as 'Str' => where { /.*@.*/ } ;

has 'subject' => ( isa => 'Str', is => 'rw',);
has 'to'      => ( isa => 'Email', is => 'rw',);

no Moose; 1;
#############################
package main;

my $msg = Message->new( 
    subject => 'Hello, World!', 
    to => 'coolkids@example.com' 
);  
print $msg->{to} . "\n";
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

String found where operator expected at message.pl line 5, near …

perl types moose

10
推荐指数
2
解决办法
2197
查看次数

Safari iPhone - 如何检测缩放级别和偏移?

我在iPhone上的Safari中查看如何在页面上跟踪用户缩放和平移的选项.Safari暴露了移动和手势事件,因此理论上我可以保持平移和缩放操作的运行记录,但这似乎有点过分,因为浏览器必须在内部跟踪它.

这些信息是通过文档对象模型公开的吗?

iphone safari

18
推荐指数
2
解决办法
2万
查看次数

从Newtonsoft的JSON Serializer解析JSON DateTime

我使用Newtonsoft的JSON序列化程序序列化了一个对象,并且DateTime已经通过:

/Date(1237588418563+0000)/
Run Code Online (Sandbox Code Playgroud)

当我使用$ .evalJSON()时,它是一个对象,但是我找不到像toUTCString这样的普通Date方法.

我有什么想法可以做到这一点?

datetime parsing json json.net

37
推荐指数
3
解决办法
8万
查看次数

免费/开放h.264视频解码库?(非GPL)

主要玩家似乎是x264和xvid,两者都是GPL.这意味着我们无法将解码功能集成到回放应用程序中,而无需将整个事物作为GPL许可,因此我们也无法使用.

首选目标平台是Linux.任何非病毒开放许可证都没问题,我们非常乐意提供我们对库所做的任何更改的来源,而不是我们的整个应用程序.

有没有什么?或者我们现在应该在开发过程中使用GPL作为测试,并计划在发货之前用商业许可的编解码器替换它?

linux video decoding codec h.264

13
推荐指数
3
解决办法
1万
查看次数

104
推荐指数
5
解决办法
5万
查看次数

有没有人去过Pragmatic Studio iPhone课程,如果有的话,值得吗?

我正在考虑去实用的工作室iphone课程,但由于价格而有点警惕.我目前从事合同工作,因此没有一家公司会为我支付课程费用,当然除了我的.

旅行,食品,酒店和货币转换后,课程可达3500多个.

这值得么?

iphone

3
推荐指数
1
解决办法
612
查看次数

如何获取按钮而不是提交

在这里,我再次看到另一个看似简单的问题,我找不到答案.我想使用输入类型="按钮",但asp:Button总是给我一个type ="submit".

<asp:Button runat="server" bla bla bla />
Run Code Online (Sandbox Code Playgroud)

提前致谢.

c# asp.net

1
推荐指数
1
解决办法
342
查看次数

圆括号与否?有什么不同?

我最近看到过这两件事,我有点困惑.

var blah = new MyClass() { Name = "hello" } 
Run Code Online (Sandbox Code Playgroud)

var blah = new MyClass { Name = "hello" } 
Run Code Online (Sandbox Code Playgroud)

有什么不同?为什么他们都工作?

更新: 这是否意味着,如果我在构造函数中有一些东西做了一些计算,我将不得不调用第一个?

c# asp.net class conventions

3
推荐指数
1
解决办法
1227
查看次数