例如,类型AA,BB和CC所有都有一个方法Close().它们没有实现任何类型的接口void Close().是否可以根据具有调用方法的类型进行类型约束Close?
public static void CloseThis<T>(this T openObject) where T : Closeable
{
openObject.Close();
}
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
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)