我倾向于支持显式接口(interface)实现而不是隐式接口(interface)实现,因为我认为针对接口(interface)而不是针对实现进行编程通常更可取,而且在处理Web服务时,这通常是必需的。也就是说,我想知道为什么以下对于显式接口(interface)声明是非法的,而对于隐式接口(interface)声明是合法的:interfaceIConnection{stringConnectionString{get;}}classConnection1:IConnection{//privatesetisillegal,won'tcompilestringIConnection.C
我倾向于支持显式接口(interface)实现而不是隐式接口(interface)实现,因为我认为针对接口(interface)而不是针对实现进行编程通常更可取,而且在处理Web服务时,这通常是必需的。也就是说,我想知道为什么以下对于显式接口(interface)声明是非法的,而对于隐式接口(interface)声明是合法的:interfaceIConnection{stringConnectionString{get;}}classConnection1:IConnection{//privatesetisillegal,won'tcompilestringIConnection.C
我看到很多C#类的示例代码都是这样做的:publicclassPoint{publicintx{get;set;}publicinty{get;set;}}或者,在旧代码中,具有显式私有(private)支持值但没有新的自动实现的属性:publicclassPoint{privateint_x;privateint_y;publicintx{get{return_x;}set{_x=value;}}publicinty{get{return_y;}set{_y=value;}}}我的问题是为什么。执行上述操作与仅将这些成员设置为公共(public)字段(如下所示)之间在功能上有什么区别
我看到很多C#类的示例代码都是这样做的:publicclassPoint{publicintx{get;set;}publicinty{get;set;}}或者,在旧代码中,具有显式私有(private)支持值但没有新的自动实现的属性:publicclassPoint{privateint_x;privateint_y;publicintx{get{return_x;}set{_x=value;}}publicinty{get{return_y;}set{_y=value;}}}我的问题是为什么。执行上述操作与仅将这些成员设置为公共(public)字段(如下所示)之间在功能上有什么区别
我创建了一个自动化属性:publicintFoo{get;}这只是setter/getter。但是当我构建构造函数时,我可以更改值:publicMyClass(stringname){Foo=5;}为什么这是可能的,即使这是get-only? 最佳答案 这是一个新的C#6功能,“Getter-onlyauto-properties”,也称为“Read-OnlyProperties的Auto-PropertyInitializers”,如本MSDNmagazinearticle'C#:TheNewandImprovedC#6.0'by
我创建了一个自动化属性:publicintFoo{get;}这只是setter/getter。但是当我构建构造函数时,我可以更改值:publicMyClass(stringname){Foo=5;}为什么这是可能的,即使这是get-only? 最佳答案 这是一个新的C#6功能,“Getter-onlyauto-properties”,也称为“Read-OnlyProperties的Auto-PropertyInitializers”,如本MSDNmagazinearticle'C#:TheNewandImprovedC#6.0'by
什么时候从属性getter或setter中抛出异常是合适的?什么时候不合适?为什么?指向有关该主题的外部文档的链接会有所帮助……谷歌搜索结果出乎意料的少。 最佳答案 Microsoft在http://msdn.microsoft.com/en-us/library/ms229006.aspx上提供了有关如何设计属性的建议从本质上讲,他们建议属性getter是始终可以安全调用的轻量级访问器。如果您需要抛出异常,他们建议将getter重新设计为方法。对于setter,它们表明异常是一种适当且可接受的错误处理策略。对于索引器,Micros
什么时候从属性getter或setter中抛出异常是合适的?什么时候不合适?为什么?指向有关该主题的外部文档的链接会有所帮助……谷歌搜索结果出乎意料的少。 最佳答案 Microsoft在http://msdn.microsoft.com/en-us/library/ms229006.aspx上提供了有关如何设计属性的建议从本质上讲,他们建议属性getter是始终可以安全调用的轻量级访问器。如果您需要抛出异常,他们建议将getter重新设计为方法。对于setter,它们表明异常是一种适当且可接受的错误处理策略。对于索引器,Micros
我有时会在getter的属性中看到缩写。例如。这两种类型:publicintNumber{get;}=0publicintNumber=>0;谁能告诉我这两者之间是否有任何区别。他们的行为如何?它们都是只读的吗? 最佳答案 是的,两者都是只读的,但还是有区别的。在第一个中,有一个在执行构造函数之前初始化为0的支持字段。您可以仅在构造函数中更改值,就像常规的只读字段一样。getter本身只是返回字段的值。在第二个中,getter每次只返回0,不涉及任何字段。因此,为了完全避免使用任何自动实现的属性或表达式体成员,我们有:第一版priv
我有时会在getter的属性中看到缩写。例如。这两种类型:publicintNumber{get;}=0publicintNumber=>0;谁能告诉我这两者之间是否有任何区别。他们的行为如何?它们都是只读的吗? 最佳答案 是的,两者都是只读的,但还是有区别的。在第一个中,有一个在执行构造函数之前初始化为0的支持字段。您可以仅在构造函数中更改值,就像常规的只读字段一样。getter本身只是返回字段的值。在第二个中,getter每次只返回0,不涉及任何字段。因此,为了完全避免使用任何自动实现的属性或表达式体成员,我们有:第一版priv