大佬教程收集整理的这篇文章主要介绍了C#Constructor重载:new object.FromOtherObject()?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
NodeA nodea = new NodeA(); NodeB nodeb = new NodeB.FromNodeA(nodea);
我一直在谷歌搜索几个小时,但未能找到办法做到这一点.我想出的最好的解决方案是;
public NodeB() { } public static NodeB FromNodeA(NodeA theNodeA) { NodeB b = new NodeB(); b.Value = theNodeA.value; // etc.. }
NodeB b = NodeB.FromNodeA(nodea);
理想情况下,我希望能够这样做:
NodeB b = new NodeB().FromNodeA(nodea);
NodeB nodeB = new NodeB(nodeA);
…但是采用工厂方法也是一种非常惯用的解决方案.它具有各种好处,包括能够使用具有不同名称但具有相同参数类型的多种方法 – 例如,
TimeSpan.FromSeconds(...) TimeSpan.Fromminutes(...)
它还允许该方法更灵活:
>在某些情况下它可能返回null(例如,对于空输入)
>它可以返回对现有对象的引用
>它可以返回子类的实例(例如Encoding.GetEncoding)
>您可以将方法组转换为委托,这对LINQ操作很方便(不需要lambda表达式)
使它成为构造函数的一个好处是,如果你有一个NodeB的子类,那么它可以有一个构造函数,它也将NodeA和链带到NodeB(NodeA)构造函数.在没有代码重复的情况下使用工厂方法方法很难实现相同的功能.
根据Alessandro的评论,您可以拥有一个用户定义的转换运算符,无论是显式还是隐式.我会对隐式转换非常小心 – 当时它们可能感觉像个好主意,但最终会导致代码在以后不清楚.
最后,你也可以在NodeA上使用ToNodeB()方法 – 直接实现,或者作为扩展方法.
NodeA nodeA = ...; // One of... NodeB nodeB = nodeA; // Implicit conversion NodeB nodeB = (NodeB) nodeA; // Explicit conversion NodeB nodeB = new NodeB(nodeA); // Constructor NodeB nodeB = NodeB.FromNodeA(nodeA); // Factory method NodeB nodeB = nodeA.ToNodeB(); // Instance or extension method on NodeA
以上是大佬教程为你收集整理的C#Constructor重载:new object.FromOtherObject()?全部内容,希望文章能够帮你解决C#Constructor重载:new object.FromOtherObject()?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。