如何在不必每次生成代码时进行更改的情况下扩展LINQ-to-SQL类?
评论更新:
我需要通过自己的参数扩展linq-to-sql类,并且不想触及任何生成的类。 欢迎任何更好的建议。 但是如果linq-to-sql类正在改变,我也不想再次进行所有属性赋值。 因此,如果vstudio为类生成新属性,我将自己的扩展属性保持独立,并且新的内部来自类本身
原始问题:
我不确定是否可能。 我有一辆级车和一辆mycar从车级延伸出来。 类mycar还有一个字符串列表。 唯一的区别。
我怎样才能将任何汽车对象投射到mycar对象,而无需手动分配所有属性。 喜欢:
Car car = new Car(); MyCar mcar = (MyCar) car;
要么
MyCar mcar = new MyCar(car);
或者我可以用自己的变量扩展汽车,而不必总是这样做
Car car = new Car(); MyCar mcar = new MyCar(); mcar.name = car.name; mcar.xyz = car.xyz; ...
谢谢。
在回答您对该问题的评论时,Linq-To-Sql类将生成为partial。 这意味着您可以使用声明为partial的相同类名的单独代码文件来添加所需的额外属性。
例如,您的Ling-To-Sql设计器类将是:
public partial class Car { .... lots of auto generated stuff .... }
您可以拥有一个名为Car.cs的独立文件(在同一个项目中):
public partial class Car { public MyCustomStuff{ get; set; } }
这两个类将合并在一起。 只需确保它们位于同一名称空间中。
您可以创建一个复制构造函数,接受派生类中的基类参数:
class MyCar { public MyCar(Car car) { name = car.name; // etc } }
你不能肯定把Car
当作MyCar
因为无法保证Car
是MyCar
。 您可以尝试强制转换并查看它是否有效,或者您可以使用as
关键字来尝试强制转换,如果失败则获取null。
如何在Car
设置属性? 为什么MyCar
只能使用相同的技术来设置其属性? 毕竟它是一辆Car
。 为什么要从Car
创建MyCar
? 为什么不首先创建一个MyCar
?
你也可以在MyCar
创建一个构造函数,它接受一个Car
并在构造函数中将MyCar
的属性赋给Car
的属性。
您也可以考虑使用装饰器模式作为子类化的替代方法,并让您的MyCar
委托调用包装的Car
您可以使用以下几种方法:
上述就是C#学习教程:如何在不必每次生成代码时进行更改的情况下扩展LINQ-to-SQL类?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1000654.html