能够通过没有setter的公共属性设置私有变量的值

时间:2015-04-07 02:58:55

标签: c# .net

这段代码如何编译并运行无错误?

private void queueToolStripMenuItem_Click(object sender, EventArgs e)
    {
        //Class name MDPlayer
        Playlist.QueueList.Add(tempPlayList[songView.SelectedIndex]);
        Playlist.GetQueue = null;
        QueueCombobox.Items.Clear();
        foreach (PlayListData pld in Playlist.QueueList)
        {
            QueueCombobox.Items.Add(pld.Track);
        }
    }
class Playlist
{
private static List<PlayListData> queueList = new List<PlayListData>();

    public static List<PlayListData> QueueList
    {
        get { return queueList;}
    }
}

如何通过甚至没有setter的公共属性QueueList添加到private的queueList?

3 个答案:

答案 0 :(得分:2)

您可以在属性getter的返回值上调用方法。

您的属性getter返回List<>List<>定义了Add方法。因此,您可以在您要求的Add上调用List<>方法。

请注意,无法listQueue类外部PlayList分配新值,因为它是private
此外,您无法为ListQueue属性分配新值,因为它没有setter访问器 这将失败:PlayList.QueueList = new List<PlayListData>();

答案 1 :(得分:1)

因为你是通过getter添加到列表中的。您没有将基础私有变量设置为任何内容。您可以QueueList.Add(),但不能QueueList = newList

答案 2 :(得分:0)

当你从getter获取一个值时,它会返回整个类,并且该类是可以改变的。如果要将整个变量设置为完全不同的类,则只需要一个setter。

<强>摘要 设置整个变量时只需要使用setter。

<强> CAN

Playlist.QueueList.Add(tempPlayList[songView.SelectedIndex]);

<强>不能

Playlist.QueueList = new List<PlayListData>();