Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中的类持久性#_C# - Fatal编程技术网

C# C语言中的类持久性#

C# C语言中的类持久性#,c#,C#,对于一个类项目,我正在用C#创建一个RSS阅读器。我有为频道、提要和文章构建的类 我的主类MainView有一个包含所有频道的频道列表 频道只是一个用来保存提要的组织类。(即“体育”、“技术”可以是渠道)。频道有一个包含所有提要的提要列表。因此,如果您有一个频道“Sports”,并且您为ESPN创建了一个RSS提要,那么我将实例化一个提要类 但是,我不知道如何使MainView类中的频道列表在所有其他类中保持不变。当我想添加一个频道时,我会创建一个允许用户输入的弹出表单类(class addCh

对于一个类项目,我正在用C#创建一个RSS阅读器。我有为频道、提要和文章构建的类

我的主类MainView有一个包含所有频道的频道列表

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

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

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

让我知道,如果有任何具体的代码,你想让我张贴

此代码在我的MainView类中

 private void addBtn_Click(object sender, EventArgs e)
        {

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

        }

 public List<Channel> Channels;

假设您没有在某个地方重置
MainView.Channels
(例如
this.Channels=new List;
this.Channels=GetMeSomeChannels();
那么当您调用
Channels.Add(channel);
时,这将添加到相同的列表中,因为两个变量引用相同的列表

例如,下面将一个
列表
传递给另一个类。然后另一个类将向列表中添加一个字符串。然后两个类都将观察到该新字符串

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

}
使用系统;
使用System.Collections.Generic;
公开课考试
{
公共静态void Main()
{
列表通道=新列表(){“a”、“b”、“c”};
AddChannel ac=新的AddChannel(通道);
ac.AddSomthing(“foo”);
foreach(通道中的var s)
{
控制台。写入线(s);
}
}
}
公共类添加频道
{
专用列表通道{get;set;}
公共添加频道(列出频道)
{
这个。通道=通道;
}
public void AddSomthing(字符串s)
{
此.Channels.Add(s);
}
}
补充阅读

  • 乔恩·斯凯特

我没有修改原始权限?不,您可能正在修改原始列表。这就是引用类型的含义。没有人可以在没有看到您的构造函数及其调用方式的情况下确定。因此,将原始频道列表发送到构造函数将自动按引用传递,而不是按值传递?我希望您没有使用r参考和价值,因为有很多关于它的困惑。但是是的。乔恩·斯基特对它到底是什么有一个清晰的认识means@ConradFrix我现在用一些代码更新了我的帖子谢谢你的那篇文章。我不知道C#将数据类型分为引用类型和值类型。我的类只是让我们直接开始构建一个C#项目,而不是先学C。
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);
        }

}