2

クラスプロジェクトでは、C#でRSSリーダーを作成しています。Channels、Feeds、Articles用に作成されたクラスがあります。

私のメインクラスのMainViewには、すべてのチャネルを保持するリストチャネルがあります。

チャネルは、フィードを保持するための単なる組織クラスです。(つまり、「スポーツ」、「テクノロジー」はチャネルである可能性があります)。チャネルには、すべてのフィードを保持するリストフィードがあります。したがって、「Sports」というチャネルがあり、ESPNのRSSフィードを作成する場合は、Feedクラスをインスタンス化します。

ただし、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);と同じリストに追加されます。

たとえば、次のデモはaList<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 に答える