是否可以通过方法名称约束类型?

The*_*Saw 1 c# generics

例如,类型AA,BBCC所有都有一个方法Close().它们没有实现任何类型的接口void Close().是否可以根据具有调用方法的类型进行类型约束Close

public static void CloseThis<T>(this T openObject) where T : Closeable
{
    openObject.Close();
}
Run Code Online (Sandbox Code Playgroud)

Ham*_*yan 6

你可以这样做:

class Abc
{
    public void Close()
    { }
}

interface IClosable
{
    void Close();
}

class AbcClosable : Abc, IClosable
{ }

class GenClosable<T> where T : IClosable
{ }
Run Code Online (Sandbox Code Playgroud)

然后用

var genClosable = new GenClosable<AbcClosable>();
Run Code Online (Sandbox Code Playgroud)

或创建通用扩展方法

public static void CloseThis<T>(this T openObject) where T : Closeable
{
    openObject.Close();
}
Run Code Online (Sandbox Code Playgroud)

然后用它作为

var abcClosable = new AbcClosable();
abcClosable.CloseThis();
Run Code Online (Sandbox Code Playgroud)