例如,类型AABBCC都具有方法Close()。他们没有使用void Close()实现任何类型的接口。是否可以基于具有Close方法的类型进行类型约束?

public static void CloseThis<T>(this T openObject) where T : Closeable
{
    openObject.Close();
}

最佳答案

您可以执行以下操作:

class Abc
{
    public void Close()
    { }
}

interface IClosable
{
    void Close();
}

class AbcClosable : Abc, IClosable
{ }

class GenClosable<T> where T : IClosable
{ }


然后使用

var genClosable = new GenClosable<AbcClosable>();


或创建通用扩展方法

public static void CloseThis<T>(this T openObject) where T : Closeable
{
    openObject.Close();
}


然后将其用作

var abcClosable = new AbcClosable();
abcClosable.CloseThis();

10-06 12:16