Можно ли передавать объект как другой тип, если у него есть операторы неявного преобразования

84
20 сентября 2019, 21:40

Хотелось бы узнать, допустим есть класс, который можно инициализировать как через конструктор, так и через оператор неявного преобразования:

internal class Sdl2Library : HObject<FreeLibraryDelegate>
{
    private readonly Dictionary<string, Delegate> _cachedProcedures = new Dictionary<string, Delegate>();
    private Sdl2Library(IntPtr hModule)
    {
        Handle = hModule;
        Free = WinApi.FreeLibrary;
    }
    public Sdl2Library()
    {
        string loadedModulePath =
            Path.Combine(
                Path.GetDirectoryName(new Uri(typeof(Sdl2Library).Assembly.CodeBase).LocalPath) ??
                throw new InvalidOperationException(), Environment.Is64BitProcess ? "x64" : "x86", "sdl.dll");
        Handle = WinApi.LoadLibrary(loadedModulePath);
        if (Handle == IntPtr.Zero)
        {
            throw new Win32Exception(Marshal.GetLastWin32Error());
        }
        Free = WinApi.FreeLibrary;
    }
    public static implicit operator IntPtr(Sdl2Library library)
    {
        return library.Handle;
    }
    public static implicit operator Sdl2Library(IntPtr ptr)
    {
        return new Sdl2Library(ptr);
    }
    protected override void Dispose(bool disposing)
    {
        Free(this);
        base.Dispose(disposing);
    }
}

Можно ли теперь делать примерно такое:

[DllImport("kernel32.dll", SetLastError = true)]
internal static extern Sdl2Library LoadLibrary(string modulePath);

Т.е. использовать тип как возвращаемый, на замену IntPtr?

Могу ли я испытывать какие либо проблемы при таком раскладе?

READ ALSO
Возникает исключение System.Net.WebException: An exception occurred during a WebClient request. Как это исправить?

Возникает исключение System.Net.WebException: An exception occurred during a WebClient request. Как это исправить?

Необходимо скачать файл с FTP после нажатия кнопки,но при этом возникает такое исключение

86
Правильно задать директорию для FirefoxProfile

Правильно задать директорию для FirefoxProfile

Пробовал так, но после запуска инстанса "C:\111\" продолжает быть пустойЯ хочу чтоб в этой папке сохранялись куки, кеш, расширения

97
Виснет передвижение объекта после Rigidbody

Виснет передвижение объекта после Rigidbody

При перемещении объекта с Rigidbody, начинает виснуть, тормозить, а когда сталкивается с другими объектами с Box colider то и вовсе не двигаетсяКак...

82