2

对于一个类项目,我正在 C# 中创建一个 RSS 阅读器。我有为频道、订阅源和文章构建的课程。

我的主类 MainView 有一个 List Channels 将保存所有频道。

Channel 只是一个保存提要的组织类。(即“体育”、“技术”可以是频道)。一个频道有一个包含所有提要的列表提要。因此,如果您有一个频道“体育”,并且您为 ESPN 创建了一个 RSS 提要,那么我将实例化一个提要类。

但是,我不确定如何使 MainView 类中的频道列表在所有其他类中持续存在。当我想添加一个频道时,我创建了一个允许用户输入的弹出表单类(addChannel 类)。但是为了访问 MainView 中的频道列表,我必须将它传递给 addChannel 的构造函数,它只是复制列表正确吗?所以现在当我在 addChannel 类中操作列表时,我不是在修改原来的对吗?

我已经习惯了 C 语言,我可以在其中传递指针并直接在内存中修改原始变量。因此,在我继续让我的程序变得最糟糕之前,我想看看我这样做是否正确。

如果您希望我发布任何特定代码,请告诉我。

此代码在我的 MainView 类中

 private void addBtn_Click(object sender, EventArgs e)
        {

            addChannel newChannel = new addChannel(channelTree, Channels);
            newChannel.Show();

        }

 public List<Channel> Channels;

这段代码在 addChannel 类中

private void button1_Click(object sender, EventArgs e)
        {


            // I want to access the channelTree treeView here
            channel = new Channel(this.channelTitle.Text, this.channelDesc.Text);

            // Save the info to an XML doc
            channel.Save();

            // So here is where I want to add the channel to the List, but am not sure if it persists or not
            channels.Add(channel);


            // Now add it to the tree view
            treeView.Nodes.Add(channel.Title);

            this.Close();
        }
4

1 回答 1

1

假设您没有在MainView.Channels某个地方重置(例如this.Channels = new List<Channels>;,或者this.Channels = GetMeSomeChannels();当您调用 channels.Add(channel);它时添加到同一个列表,因为两个变量都引用同一个列表。

例如下面的演示将 a 传递List<string>给另一个类。然后另一个类将一个字符串添加到列表中。然后两个类都观察到这个新字符串。

using System;
using System.Collections.Generic;

public class Test
{


    public static void Main()
    {
        List<string> Channels = new List<string>() {"a","b", "c"};
        AddChannel ac = new AddChannel(Channels);
                ac.AddSomthing("foo");

                foreach(var s in Channels)
        {
            Console.WriteLine(s);
        }

    }


}
public class AddChannel 
{
        private List<string> Channels {get;set;}
    public AddChannel(List<string> Channels )
        {
        this.Channels = Channels ; 
    }

        public void AddSomthing(string s)
        {
            this.Channels.Add(s);
        }

}

补充阅读

于 2013-03-25T14:44:43.203 回答