ReadOnly属性C#

时间:2014-07-01 13:56:52

标签: c# .net properties

我想在数据传输对象,DTO对象中具有readonly属性,没有设置;访问者如:

public class ViewBannerDTO
    {
        public int Id { get;  }
    }

但为什么要:

  

' ViewBannerDTO.Id.get'必须声明一个正文,因为它没有标记为抽象或外部。自动实现的属性必须定义get和set访问器。

以及为什么我不能:

public readonly int Id{get;}

3 个答案:

答案 0 :(得分:7)

您不能为自动实现的属性设置 no setter(否则您将如何设置它?)。您可以添加getter实现(如有必要,还可以添加支持字段)或使用private setter:

public class ViewBannerDTO
{
    public int Id { get; private set; }
}
  

为什么我不能这样做:

public readonly int Id{get;}

因为readonly仅适用于字段。您可以使用readonly支持字段而不使用set访问者来对属性执行相同的操作:

private readonly int _Id;
public int Id {get { return _Id; } }

但是您不能拥有readonly自动实现属性,因为没有语法来初始化没有set访问器的属性。

答案 1 :(得分:0)

这正是sais:没有为该变量设置访问器,并且没有实现的Get方法可以为你提供一些价值。

要么去:

public int Id { get; set; }

OR

    public int Id
    {
        get
        {
            int something = GetStuffDone();
            return something;
        }
    }

你可以做的另一件事就是将set函数设为私有:

public int Id { get; private set; }

并解答你为什么不能解决的问题:永远不会设置该值,因为它没有访问者。

答案 2 :(得分:0)

这只是答案的重复,但OP不理解

public class ViewBannerDTO
{
    public int Id { get; private set; }
    public ViewBannerDTO () 
    {
         Id = 12;  // inside the class can assign private
                   // private not seen outside the classs 
    }
}

或者你可以

public class ViewBannerDTO
{
    private int id = 12;
    public int Id { get { return id; } }
}

或者你可以

public class ViewBannerDTO
{
    public int Id { get { return 12; }
}