我想在数据传输对象,DTO对象中具有readonly属性,没有设置;访问者如:
public class ViewBannerDTO
{
public int Id { get; }
}
但为什么要:
' ViewBannerDTO.Id.get'必须声明一个正文,因为它没有标记为抽象或外部。自动实现的属性必须定义get和set访问器。
以及为什么我不能:
public readonly int Id{get;}
答案 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; }
}