[英]Using Abstract Classes in C#
我有一个抽象的 class 其他类正在继承它。
public abstract class GenericAccess<TEntity>
{
public static IList<TEntity> GetObjectListFromArray(int[] IDs)
{
//Your help need is here.
}
}
public class Doors : GenericAccess<DoorEntity>
{
}
public class DoorEntity
{
public int Id { get; set; }
public string Name { get; set; }
}
我需要创建一个通用方法,所以当我可以时
IList<DoorEntity> Doors.GetObjectListFromArray(int[] {1,2,3,4,5});
它将返回一个 IList,其中包含所有对象,其中属性 Id 加载了传递的值。 在上面的示例中,它将返回一个列表,列表中包含 5 个项目,并加载了 DoorEntity 的 Id。
使用接口或底座 class...
带接口:
public abstract class GenericAccess<TEntity> where TEntity : IEntity, new()
{
public static IList<TEntity> GetObjectListFromArray(int[] IDs)
{
return IDs.Select(id => new TEntity { Id = id }).ToList();
}
}
public class Doors : GenericAccess<DoorEntity>
{
}
public class DoorEntity : IEntity
{
public int Id { get; set; }
public string Name { get; set; }
}
public interface IEntity
{
int Id { get; set; }
string Name { get; set; }
}
使用底座 class:
public abstract class GenericAccess<TEntity> where TEntity : Entity, new()
{
public static IList<TEntity> GetObjectListFromArray(int[] IDs)
{
return IDs.Select(id => new TEntity { Id = id }).ToList();
}
}
public class Doors : GenericAccess<DoorEntity>
{
}
public class DoorEntity : Entity
{
}
public abstract class Entity
{
public int Id { get; set; }
public string Name { get; set; }
}
我不确定这是否是您想要的,但这里有:
return from int id in Ids
select new TEntity (id);
您必须更正 GenericAccess class 的定义以向通用参数添加约束,如下所示:
public abstract class GenericAccess<TEntity> where TEntity : class, new
好的,根据您的评论...
使用 LINQ 和 NHibernate 来获取实体,类似于:
return from int id in Ids
select Session.Query (...).Where (x => x.Id === id);
你的 function 可以是这样的
public static IList<TEntity> GetObjectListFromArray(int[] IDs)
{
var r = new List<TEntity>();
foreach (var item in IDs)
{
var obj = typeof(TEntity).Assembly.CreateInstance(typeof(TEntity).FullName);
var p = obj.GetType().GetProperty("Id", System.Reflection.BindingFlags.IgnoreCase | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
if (p != null)
{
p.SetValue(obj, item, null);
var m = r.GetType().GetMethod("Add");
m.Invoke(r, new object[] { obj });
}
}
return r;
}
}
和
IList<DoorEntity> r = Doors.GetObjectListFromArray(new int[] {1,2,3,4,5});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.