草庐IT

c# - .net 中的对象复制方法 : Auto Mapper, Emit Mapper、隐式操作、属性复制

如果有人知道在.NET中执行此操作的更多方法,您对这些方法有何看法?您选择哪种方法,为什么?下面是.NET中对象拷贝不同方式的测试。与此原始线程相关的测试:HowtocopyvaluefromclassXtoclassYwiththesamepropertynameinc#?所以,在这里,您可以自己运行它:staticvoidMain(string[]args){Student_student=newStudent();_student.Id=1;_student.Name="Timmmmmmmmaaaahhhh";_student.Courses=newList();_student

c# - 为什么必须显式实现此接口(interface)?

几年后回到C#,所以我有点生疏了。遇到这个(简化的)代码,它让我摸不着头脑。为什么必须显式实现IDataItem.Children属性(property)?不正常Children属性满足要求?毕竟属性是直接用来满足的。为什么不是隐含的?publicinterfaceIDataItem{IEnumerableChildren{get;}}publicclassDataItem:IDataItem{publicCollectionChildren{get;}=newCollection();//Whydoesn't'Children'aboveimplementthisautomatica

c# - 接口(interface)的隐式和显式实现

在进行升级时,我碰巧遇到了这样的代码。interfaceICustomization{IMMColumnsDefinitionGetColumnsDefinition();}classCustomization:ICustomization{privatereadonlyColumnDefinition_columnDefinition;//Morecodehere.publicColumnsDefinitionGetColumnsDefinition(){return_columnDefinition;}ColumnsDefinitionICustomization.GetColum

c# - 我可以/应该使用隐式运算符而不是覆盖 ToString 吗?

我有一个类,我想轻松地写出字符串(例如,用于记录目的)。我可以使用隐式运算符将对象隐式转换为字符串而不是重写ToString方法吗?例如,我有一个包含姓名和年龄的Person类:publicclassPerson{publicstringName{get;set;}publicintAge{get;set;}}我可以覆盖ToString:publicoverridestringToString(){returnString.Format("Name:{0},Age:{1}",this.Name,this.Age);}或者我可以使用隐式运算符:publicstaticimplicitop

c# - 在 C# 中,为什么接口(interface)实现必须显式实现方法的另一个版本?

举个例子:publicinterfaceIFoo{IFooBar();}publicclassFoo:IFoo{publicFooBar(){//...}IFooIFoo.Bar(){returnBar();}//Whyisthisnecessary?}为什么IFooBar()的隐式实现是必要的,即使Foo无需转换就可以转换为IFoo? 最佳答案 在这种情况下需要它,因为C#不支持接口(interface)的返回类型协变,所以你的函数publicFooBar(){//...}不满足IFoo接口(interface),因为Bar方法的

c# - 显式接口(interface)实现不能是虚拟的

郑重声明,我已经看过这个connectitem但我真的不明白支持这个会有什么问题。假设我有以下代码:publicinterfaceIInterface{voidMethod();}publicclassBase:IInterface{virtualvoidIInterface.Method(){thrownewNotImplementedException();}}虚拟标识符有什么问题?使用virtual修饰符可以override指示基类中有不同的实现。我现在可以通过删除虚拟方法并像这样创建派生类来使其工作:publicclassDerived:IInterface{voidIInte

c# - 如果没有可空 DateTime 的隐式运算符,为什么 C# 隐式转换为可空 DateTime?

这是一个关于C#语言或至少该语言在VisualStudio中是如何实现的问题。假设有一个Foo类,它为System.DateTime定义了一个隐式运算符publicstaticimplicitoperatorDateTime(Fooitem)考虑以下代码:Foofoo=SomeMethodWhichCanReturnNull();DateTime?dtFoo=foo;我的期望:编译失败提示没有从Foo到DateTime?的转换。我的发现:编译器实际上调用了从Foo到DateTime的已定义隐式运算符,并在传递null(它是转换器可以响应null的唯一方式)。当然,work-around

c# - 显式事件添加/删除,误解了吗?

我最近一直在研究内存管理,并且一直在研究如何管理事件,现在,我看到了事件订阅的显式添加/删除语法。我觉得很简单,添加/删除只是让我在订阅和取消订阅时执行其他逻辑?我明白了吗,还是还有更多?此外,当我在这里时,任何清理我的事件句柄的建议/最佳实践。 最佳答案 add/remove属性与其他成员使用set/get属性的逻辑基本相同。它允许您在注册事件时创建一些额外的逻辑,并封装事件本身。您为什么要这样做的一个很好的例子是在不需要时停止额外的计算(没有人正在收听该事件)。例如,假设事件是由计时器触发的,如果没有人注册该事件,我们不希望计时

c# - 无法将类型 'string' 隐式转换为 'System.DateTime'

我正在尝试从字符串转换为DataTime,但出现错误。我正在使用VS2003,.NETFramework1.1DateTimedt=Convert.ToDateTime("11/23/2010");strings2=dt.ToString("dd-MM-yyyy");DateTimedtnew=Convert.ToString(s2);Cannotimplicitlyconverttype'string'to'System.DateTime'任何人都可以帮助我解决错误的语法。 最佳答案 stringinput="21-12-2010

c# - 在显式构造函数之外初始化字段是不好的做法吗

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:Initializeclassfieldsinconstructororatdeclaration?我们正在争论编码实践。这里的例子有点太简单了,但真正的交易有几个构造函数。为了初始化简单值(例如,将日期设置为最小值),我已将代码从构造函数中移出并移入字段定义中。publicclassConstructorExample{string_string="John";}publicclassConstructorExample2{string_string;publicConstructorExample2(){