通用中没有静态.但是如何实现这一目标
本文关键字:实现 目标 何实现 静态 | 更新日期: 2023-09-27 18:34:57
请检查以下代码部分(简体版(
我关心的是ReadPath
类,我需要调用我正在使用的类型的 GetPath((。我怎样才能做到这一点?
public interface IPath
{
string GetPath();
}
public class classA: IPath
{
string GetPath()
{
return "C:'";
}
}
public class classB: IPath
{
string GetPath()
{
return "D:'";
}
}
public class ReadPath<T> where T : IPath
{
public List<T> ReadType()
{
// How to call GetPath() associated with the context type.
}
}
public interface IPath
{
string GetPath();
}
public class classA : IPath
{
public string GetPath()
{
return @"C:'";
}
}
public class classB : IPath
{
public string GetPath()
{
return @"D:'";
}
}
public class ReadPath<T> where T : IPath, new()
{
private IPath iPath;
public List<T> ReadType()
{
iPath = new T();
iPath.GetPath();
//return some list of type T
}
}
接口是基于实例的。因此,如果您想这样做,请传入一个实例并使用它。
但是,有一个基于类型的概念:属性:
[TypePath(@"C:'")]
public class classA
{
}
[TypePath(@"D:'")]
public class classB
{
}
public class ReadPath<T>
{
public static List<T> ReadType()
{
var attrib = (TypePathAttribute)Attribute.GetCustomAttribute(
typeof(T), typeof(TypePathAttribute));
var path = attrib.Path;
...
}
}
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct
| AttributeTargets.Interface | AttributeTargets.Enum,
AllowMultiple = false, Inherited = false)]
public class TypePathAttribute : Attribute
{
public string Path { get; private set; }
public TypePathAttribute(string path) { Path = path; }
}
另一种解决方案是实例成员,但您应该稍微更改泛型声明:
public class ReadPath<T> where T : IPath, new() //default ctor presence
{
T mem = new T();
public string ReadType()
{
return mem.GetPath();
}
}
并不是说我更改了返回类型,因为不清楚您将如何将返回类型string
与List<T>
您在 .net/c# 编程的几个不同方面之间混淆了。
静态方法(这里甚至没有(不能通过接口定义,所以如果你有兴趣使用静态方法,接口 wotn 可以帮助你,你可以通过反射以通用的方式执行这种方法。
代码有点不清楚,很难理解为什么你的readtype方法返回一个列表,以及你应该如何填写这个列表。