我有一个父和子类都需要实现IDisposable.应该把virtual(和base.Dispose()?)电话放在哪里?当我只是覆盖Dispose(bool disposing)调用时,我觉得很奇怪,我IDisposable没有显式Dispose()函数(仅使用继承的函数)实现,但是还有其他所有功能.
我一直在做什么(微不足道):
internal class FooBase : IDisposable
{
Socket baseSocket;
private void SendNormalShutdown() { }
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private bool _disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
SendNormalShutdown();
}
baseSocket.Close();
}
}
~FooBase()
{
Dispose(false);
}
}
internal class Foo : FooBase, IDisposable
{
Socket extraSocket;
private bool _disposed = false;
protected override void Dispose(bool …Run Code Online (Sandbox Code Playgroud) 我遇到了一些代码问题,这些代码旨在通过搜索他们的电子邮件地址来查找Active Directory中的用户.我尝试了2种方法,但有时我发现FindOne()方法在某些情况下不会返回任何结果.如果我在Outlook中的GAL中查找用户,我会看到列出的SMTP电子邮件地址.
我的最终目标是确认用户是否存在于AD中.我只有电子邮件地址作为搜索条件,因此无法使用名字或姓氏.
方法1:使用邮件属性:
DirectorySearcher search = new DirectorySearcher(entry);
search.Filter = "(mail=" + email + ")";
search.PropertiesToLoad.Add("mail");
SearchResult result = search.FindOne();
Run Code Online (Sandbox Code Playgroud)
方法2:proxyAddresses属性:
DirectorySearcher search = new DirectorySearcher(entry);
search.Filter = "(proxyAddresses=SMTP:" + email + ")"; // I've also tried with =smtp:
search.PropertiesToLoad.Add("mail");
SearchResult result = search.FindOne();
Run Code Online (Sandbox Code Playgroud)
我已经尝试更改电子邮件地址输入的大小写,但它仍然没有返回结果.这里是否存在区分大小写的问题?如果是这样,解决它的最佳方法是什么?
这主要是为了好奇,因为有我能想到的实现几乎所有用例的更好的方式为这个结构(在C#和其他语言我经常使用,至少),但我最近看到在这里一个范围的互斥这是一个很酷的概念.
我的问题是,using语句是否维护一个引用(即:阻止GC运行)到它所作用的对象?
例如,如果我这样做:
using (new ScopedMutex())
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
ScopedMutex对象是否会在使用块结束时保持其存在,或者GC可以在块中运行并处理它吗?