在Java中,我可以声明一个方法:public boolean doSth(Cache<?> cache, CacheItem item){...}
public interface Cache<T> {
public boolean Contains(T item);
}
public class CacheFilePath implements Cache<FilePathItem> {
@Override
public boolean Contains(FilePathItem item) {
return false; // TODO
}
}
public class ItemHandler {
public boolean doSth(Cache<?> cache, CacheItem item){
if(cache instanceof CacheHostName && item instanceof HostNameItem){
CacheHostName c = (CacheHostName) cache;
HostNameItem i = (HostNameItem) item;
return check(c, i);
}
else if(cache instanceof CacheFilePath && item instanceof FilePathItem){
CacheFilePath c = (CacheFilePath) cache;
FilePathItem i = (FilePathItem) item;
return check(c, i);
}
throw new RuntimeException("Invalid arguments !!!");
}
private boolean check(Cache<HostNameItem> cache, HostNameItem item){
return cache.Contains(item);
}
private boolean check(Cache<FilePathItem> cache, FilePathItem item){
return cache.Contains(item);
}
}
如何在C#中声明这样的方法?
答案 0 :(得分:2)
您可以在方法上声明类型参数,如下所示:
public boolean doSth<T>(Cache<T> cache, CacheItem item){
...
}
或者使用非泛型基类或接口:
public interface ICache { ... }
public class Cache<T> : ICache { ... }
public boolean doSth(ICache cache, CacheItem item){
...
}