我有一個通用的基類包裝COM對象,並希望將其約束到COM對象。 我試過where TComObject : IUnknown
但編譯器不喜歡它。有沒有辦法做到這一點?通用約束的COM對象
我使用下面的代碼,請給出反饋,如果你發現一些愚蠢的東西。
public abstract class ComWrapper<TComObject> : IDisposable, IComWrapper<TComObject> where TComObject : class
{
protected ComWrapper(TComObject comObject)
{
ComObject = comObject;
}
protected TComObject ComObject { get; set; }
/// <summary>
/// Use with caution, this accesses the COM object, cleanup might be needed
/// </summary>
/// <returns></returns>
public TComObject GetComObject()
{
return ComObject;
}
public void SetComObject(TComObject comObject)
{
CheckAndReleaseComObject();
ComObject=comObject;
}
public void Dispose()
{
Dispose(true);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
// free managed resources
}
// free native resources if there are any.
CheckAndReleaseComObject();
}
private void CheckAndReleaseComObject()
{
if (ComObject != null)
{
if (ComObject.GetType().IsCOMObject)
Marshal.ReleaseComObject(ComObject);
ComObject = null;
}
}
}
終結者不僅沒有意義,而且會導致程序崩潰。 –
謝謝先生!我將更新代碼 –
@HansPassant爲什麼它會使程序崩潰? :) –