2015-04-07 60 views
0

此代码如何能够编译并运行无错误?可以通过公共属性设置私有变量的值,无需设置器

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;} 
    } 
} 

我怎么能够通过公共属性QueueList添加到queueList,甚至没有setter?

回答

2

您可以针对属性获取器的返回值调用方法。

您的财产获得者返回List<>List<>定义了Add方法。因此,您可以拨打List<>上询问的Add方法。

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

1

因为你通过getter添加到列表中。你没有将底层私有变量设置为任何东西。你可以做QueueList.Add(),但不是QueueList = newList

0

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

摘要 您只需要在设置整个变量时使用setter。

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

不能

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

属性获取返回的对象,而不是类。同样,setter访问器也只能用于对象,而不是类。 –