好的,我们有包含属性的类Ticket:
List<TaskComment> Comments;
Run Code Online (Sandbox Code Playgroud)
我设置了back属性,以便我可以做一些验证:
private List<TaskComment> _comments;
public List<TaskComment> Comment
{
get
{ //stuff }
internal set
{ //stuff }
}
Run Code Online (Sandbox Code Playgroud)
尽管将set设置为internal,但Add()方法仍然在程序集外部公开.但无论如何,我想要做的是设置评论对象的ticketId属性,因为它被添加到集合中.例如:
var ticket = new TaskTicket();
var comment = new TaskComment { //initializers }
ticket.Comments.Add(comment);
--inside the ticket:
public List<TaskComment> Comments
{
get{ //stuff }
set
{
((TaskComment)value).TicketId = this._ticketId;
}
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用.它告诉我它无法从TaskComment转换为MyLibrary.TaskComment.这对我来说真的没有任何意义.但除此之外,无论如何,这感觉不对.那么在将传入的值/对象添加到类的集合之前,我究竟该如何修改它?
Collection以只读方式公开:
public IReadOnlyCollection<TaskComment> Comments
{
get { return new ReadOnlyCollection(_comments); }
}
Run Code Online (Sandbox Code Playgroud)
_comments现在使用先前的实现向调用者公开.允许客户端添加/删除您实现的项目Add以及Remove从内部列表添加\ remove的成员.
public void Add(Comment comment)
{
/* code */
_comments.Add(comment);
}
public void Remove(Comment comment)
{
/* code */
_comments.Remove(comment);
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以实现自己 IList的方法,为您Add和Remove方法提供正确的实现.
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |