【问题标题】:How to set default value for Auto-Implemented Properties in ASP.NET [duplicate]如何在 ASP.NET 中设置自动实现属性的默认值 [重复]
【发布时间】:2011-11-28 09:38:02
【问题描述】:

我开始知道 C# 3.0 带有自动实现属性的新功能,我喜欢它,因为我们不必在此声明额外的私有变量(与早期的属性相比),之前我使用的是属性即

private bool isPopup = true;
public bool IsPopup
{
    get
    {
      return isPopup;
    }
    set
    {
      isPopup = value;
    }
}

现在我已将其转换为自动实现的属性,即

public bool IsPopup
{
    get; set;
}

我想将此属性的默认值设置为true,即使在page_init方法中也不使用它,我试过但没有成功,谁能解释一下如何做到这一点?

【问题讨论】:

  • 在构造函数中初始化

标签: c# asp.net default-value automatic-properties


【解决方案1】:

可以在默认构造函数中初始化属性:

public MyClass()
{
   IsPopup = true;
}

在 C# 6.0 中,可以像普通成员字段一样在声明中初始化属性:

public bool IsPopup { get; set; } = true;  // property initializer

现在甚至可以创建一个真正的只读自动属性,您可以直接初始化或在构造函数中初始化,但不能在类的其他方法中设置。

public bool IsPopup { get; } = true;  // read-only property with initializer

【讨论】:

  • 谢谢,我认为这是唯一的办法。
  • 寻找更具体的答案,为此我必须在构造函数中编写额外的代码,是否没有办法在自动实现的属性本身中编写它,而不使用旧的约定。
  • 你必须以某种方式初始化你的属性。由于没有支持字段(它由编译器生成),因此没有其他选择。在这种情况下,我编写了完整的属性,幸运的是你得到了智能感知。
  • @slfan 你能详细说明一下吗?我开始使用汽车并试图了解基础知识。您的回答是有道理的,但是您的评论(当我阅读时)似乎与之相矛盾-我确定我误解了您在该评论中所说的内容,因为您的回答不正确并且有赞成票。
  • 目前这是唯一的方法。在即将到来的 C# 6.0 中,将有可能直接初始化属性。只有当我必须在 setter 或 getter 中编写代码时,我才会使用完整的属性。
【解决方案2】:

为自动属性指定的属性不适用于支持字段,因此默认值的属性不适用于此类属性。

但是,您可以初始化自动属性:

VB.NET

Property FirstName As String = "James"
Property PartNo As Integer = 44302
Property Orders As New List(Of Order)(500)

C# 6.0 及更高版本

public string FirstName { get; set; } = "James";
public int PartNo { get; set; } = 44302;
public List<Order> Orders { get; set; } = new List<Order>(500);

C# 5.0 及以下

很遗憾,低于 6.0 的 C# 版本不支持此功能,因此您必须在构造函数中初始化自动属性的默认值。

【讨论】:

  • 好编辑 Eagle-Eye,感谢更新此内容以包含 C# 6.0。
【解决方案3】:

【讨论】:

  • 好的,所以我发现这不是正确的方法。似乎 DefaultValueAttribute 只是指示元数据属性可以具有默认值并没有实际设置它。所以我希望这会有所帮助某人。
【解决方案4】:
using System.ComponentModel;

[DefaultValue(true)]
public bool IsPopup
{
    get
    {
      return isPopup;
    }
    set
    {
      isPopup = value;
    }
}

【讨论】:

  • 你看到 Akshat Jeewan Sharma 的答案了吗?
  • 是“复制粘贴”吗?
  • 查看@Jeewan Sharma 的回答以了解这不是正确的做法。
【解决方案5】:

您可以使用 默认属性值,如下所示

此方法的一个优点是您不需要检查 Boolean 类型的空值

using System.ComponentModel; 

public class ClassName
 {
   [DefaultValue(true)]
   public bool IsPopup{ get; set; }
 }

【讨论】:

  • 这实际上并没有设置默认值,它只是表示默认值应该是什么
  • @JoeFlateau 你能解释一下这两种方法有什么区别吗?B'cos 当我从控制器访问该属性时,它的值为 true。那么呢?
  • DefaultValue 仅供参考,Visual Studio 会将值显示为非粗体。
猜你喜欢
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
  • 2014-08-17
  • 1970-01-01
  • 2021-12-15
  • 2017-02-16
  • 1970-01-01
  • 2012-10-14
相关资源
最近更新 更多