C# 派生类的集合
我正在重构我的关注点分离(SoC)代码。将非AutoCAD代码移到不同dll文件中的单独dll(如此常见)、数据访问、web服务、AutoCAD相关等 以下是我的班级样本:C# 派生类的集合,c#,collections,derived-class,C#,Collections,Derived Class,我正在重构我的关注点分离(SoC)代码。将非AutoCAD代码移到不同dll文件中的单独dll(如此常见)、数据访问、web服务、AutoCAD相关等 以下是我的班级样本: // non-AutoCAD dll public class Loc { public int Id; public string Name; ... } // AutoCAD dll public class AcadLoc : Loc { public ObjectId oid; }
// non-AutoCAD dll
public class Loc
{
public int Id;
public string Name;
...
}
// AutoCAD dll
public class AcadLoc : Loc
{
public ObjectId oid;
}
// non-AutoCAD dll
public class Locs : List<Loc>
{
public Loc Get_By_Id(long id)
{
return this.SingleOrDefault(n => n.Id == id);
}
}
// AutoCAD dll
public class AcadLocs : Locs // or List<AcadLoc> ?
{
}
我试过:
public class AcadLocs : Locs // or List<AcadLoc> ?
{
public AcadLoc Get_By_Id(int id)
{
return this.SingleOrDefault(n => n.Id == id);
}
}
但是
谢谢
Wes我认为您需要的是扩展方法
public static class MyExtension
{
public static Loc Get_By_Id(this Locs l,int id)
{
return l.SingleOrDefault(n => n.Id == id);
}
public static bool Check(this Locs l)
{
foreach (Loc loc in l)
{
....
}
}
}
一旦你有了这段代码,就可以像这样调用这些方法
myAcadLocs.Get_By_Id(1);
myAcadLocs.Check();
myLocs.Get_By_Id(1);
myLocs.Check();
Locs locs = new AcadLocs();
我想你需要的是扩展方法
public static class MyExtension
{
public static Loc Get_By_Id(this Locs l,int id)
{
return l.SingleOrDefault(n => n.Id == id);
}
public static bool Check(this Locs l)
{
foreach (Loc loc in l)
{
....
}
}
}
一旦你有了这段代码,就可以像这样调用这些方法
myAcadLocs.Get_By_Id(1);
myAcadLocs.Check();
myLocs.Get_By_Id(1);
myLocs.Check();
Locs locs = new AcadLocs();
我指的是你的第一次尝试 1.遗产 那么您肯定需要从
loc
派生
2.通过Id获取
对于此方法,我将使用类型为的方法,如下所示:
public class AcadLocs : Locs // or List<AcadLoc> ?
{
public AcadLoc Get_By_Id(int id)
{
return this.OfType<AcadLoc>().SingleOrDefault(n => n.Id == id);
}
}
公共类AcadLocs:Locs//还是列表?
{
公共AcadLoc按Id获取(int Id)
{
返回此.OfType().SingleOrDefault(n=>n.Id==Id);
}
}
of type
从现有序列中创建一个IEnumeralbe
,只选择指定类型的元素(AcadLoc
)。这也将对您的检查方法有所帮助。我指的是您的第一次尝试
1.遗产
那么您肯定需要从loc
派生
2.通过Id获取
对于此方法,我将使用类型为
的方法,如下所示:
public class AcadLocs : Locs // or List<AcadLoc> ?
{
public AcadLoc Get_By_Id(int id)
{
return this.OfType<AcadLoc>().SingleOrDefault(n => n.Id == id);
}
}
公共类AcadLocs:Locs//还是列表?
{
公共AcadLoc按Id获取(int Id)
{
返回此.OfType().SingleOrDefault(n=>n.Id==Id);
}
}
of type
从现有序列中创建一个IEnumeralbe
,只选择指定类型的元素(AcadLoc
)。这也将帮助您使用检查方法。“//失败”--如何?如果您不告诉我们失败的原因,我们如何回答您的问题?我收到了编译错误消息:“AcadLocs”不包含“Check”的定义,并且找不到接受“AcadLocs”类型的第一个参数的扩展方法“Check”(您是否缺少using指令或程序集引用?//failed)--如何?如果您不告诉我们失败的原因,我们如何回答您的问题?我收到了编译错误消息:“AcadLocs”不包含“Check”的定义,并且找不到接受“AcadLocs”类型的第一个参数的扩展方法“Check”(您是否缺少using指令或程序集引用?)
public class AcadLocs : Locs // or List<AcadLoc> ?
{
public AcadLoc Get_By_Id(int id)
{
return this.OfType<AcadLoc>().SingleOrDefault(n => n.Id == id);
}
}