我有这个父类
public abstract class Parent
{
public string Id { get; set; }
public static T Find<T>(string id) where T : class, new()
{
/* logic here ..*/
}
}
和这个孩子
public class Child : Parent
{
public string Name { get; set; }
}
现在,可以从子类中调用Find()
方法,如Child.Find<Child>(myId);
我需要更改内容,因此不必包含类似Child.Find(myId);
修改
我想将此方法作为扩展,直接获取它而不将类定义为变量。通用类T
应该是它的子类型。
答案 0 :(得分:0)
你的意思是这样的:
public abstract class Parent
{
public string Id { get; set; }
public static Parent Find(string id)
{
/* logic here ..*/
}
}
这样您就必须将输出强制转换为正确类型的派生类。例如:
if(Parent.Find("123") is Child child)
{
child.Name = "TEST";
}
修改强>
隐藏继承的成员并定义一个新成员:
public abstract class Parent
{
public string Id { get; set; }
public static Parent Find(string id)
{
/* logic here ..*/
}
}
public class Child : Parent
{
public string Name { get; set; }
public new static Child Find(string id)
{
/* logic here */
}
}
答案 1 :(得分:0)
一种选择是将此方法添加到Child
类:
public static Child Find(string id)
{
return Parent.Find<Child>(id);
}
答案 2 :(得分:0)
我会做这样的事情:
public abstract class Parent<T> where T : class, new()
{
public T Find(string id)
{
return new T();
}
}
public class Child : Parent<Child>
{
public void Test()
{
var child = base.Find ("");
}
}
答案 3 :(得分:0)
这将是扩展方法方法:
public static class ExtensionMethods
{
public static T Find<T>(this T source, string id) where T : class, new()
{
return new T();
}
}
public class Child
{
public void FindChild()
{
this.Find("");
}
}