我有两节课:
class object {
int id{ get; set; }
string name { get; set; }
string description { get; set; }
}
和
class extendedObject : object {
int quantity { get; set; }
string moreDetail{ get; set; }
}
我想将对象的属性分配给扩展对象。
例如,extendedObject =(extendedObject)object;
答案 0 :(得分:1)
在您的示例中,您似乎正在尝试分配变量,而不是属性。这是不可能的,因为继承的类不能包含基类的变量。
如果您要具有一个extendedObject类型的单独对象并从该对象复制数据,那么恐怕您必须自己编写代码。使用复制构造函数或单独的方法。
例如
class extendedObject : object
{
int quantity { get; set; }
string moreDetail{ get; set; }
public extendedObject(object myObject)
{
id = myObject.id.
/// etc.
}
}
P.S。周围有各种各样的映射器(特殊库),例如AutoMapper
等可以使您更轻松地完成此任务,但我不建议这样做,从长远来看,这样做会更加昂贵。
答案 1 :(得分:1)
通过语言设计,您无法将BaseObject
投射到ExtendedObject
。
您甚至无法在它们之间定义implicit
或explicit
operator
。
这是一个可能的解决方法:
class Program
{
static void Main(string[] args)
{
BaseObject baseObject = new BaseObject()
{
ID = 0,
Name = "TEST",
Description = "TEST"
};
ExtendedObject extendedObject = new ExtendedObject(baseObject);
}
}
public class BaseObject
{
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
public class ExtendedObject : BaseObject
{
public ExtendedObject(BaseObject baseObject)
{
this.ID = baseObject.ID;
this.Name = baseObject.Name;
this.Description = baseObject.Description;
}
public int Quantity { get; set; }
public string MoreDetails { get; set; }
}
答案 2 :(得分:0)
直接投稿是不可能的。您必须将该类声明为派生类:
public class Program
{
public static void Main()
{
BaseClass c = new ExtendedClass() { id= 2, name = "Jhon"};
ExtendedClass extended = c as ExtendedClass;
Console.WriteLine(extended.name);
}
}
public class BaseClass
{
public int id{ get; set; }
public string name { get; set; }
public string description { get; set; }
}
public class ExtendedClass : BaseClass
{
public int quantity { get; set; }
public string moreDetail{ get; set; }
}