File: system\runtime\interopservices\windowsruntime\IClosable.cs
Project: ndp\clr\src\bcl\mscorlib.csproj (mscorlib)
// 
//   Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// ==--==
//
// <OWNER>Pallavit</OWNER>
 
using System;
using System.Security;
using System.Collections;
using System.Diagnostics.Contracts;
using System.Runtime.CompilerServices;
 
namespace System.Runtime.InteropServices.WindowsRuntime
{
 
    // Local definition of Windows.Foundation.IClosable
    [ComImport]
    [Guid("30d5a829-7fa4-4026-83bb-d75bae4ea99e")]
    [WindowsRuntimeImport]
    internal interface IClosable
    {
        void Close();
    }
 
    // Adapter class - converts IClosable.Close calls to Disposable.Dispose
    internal sealed class IDisposableToIClosableAdapter
    {
        private IDisposableToIClosableAdapter()
        {
            Contract.Assert(false, "This class is never instantiated");
        }
 
        [SecurityCritical]
        public void Close()
        {
            IDisposable _this = JitHelpers.UnsafeCast<IDisposable>(this);
            _this.Dispose();
        }
    }
 
    // Adapter class which converts IDisposable.Dispose calls into IClosable.Close
    [SecurityCritical]
    internal sealed class IClosableToIDisposableAdapter
    {
        private IClosableToIDisposableAdapter()
        {
            Contract.Assert(false, "This class is never instantiated");
        }
 
        [SecurityCritical]
        private void Dispose()
        {
            IClosable _this = JitHelpers.UnsafeCast<IClosable>(this);
            _this.Close();
        }
    }
}