C# 无法理解静态属性如何工作

标签 c# static-methods

我是 C# 语言的新手。我创建了一个用户表单并在其上添加了一个 ListView (将其更改为公共(public))。现在我添加了一个像这样的静态类

public static class listView
    {
        private static ListView.ListViewItemCollection litm;
        public static ListView.ListViewItemCollection listItems
        {

            get
            {
                Form1 frm = new Form1();
                return frm.listView1.Items;
            }

            set
            {
                litm = value;
            }
        }
    }

现在在按钮后面添加了以下代码,

 private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show(listView.listItems.Count.ToString()); //Works
            listView.listItems.Add("Fail"); //Fails
            this.listView1.Items.Add("HH"); //Works
        }

在这里,我可以使用获取项目数。我认为 get 有效。但是当我尝试添加新项目时,它什么也没做。没有错误,但没有添加条目。

我有兴趣了解为什么会发生这种情况。任何指导表示赞赏。

最佳答案

在属性的 getter 中,您正在创建表单 1 的新实例并向其中添加项目。

它与静态或非静态无关。

看看这个:

get
{
    Form1 frm = new Form1();
    return frm.listView1.Items;
}

所以当你

listView.listItems.Add("Fail");

您正在将项目添加到表单 1 的 ListView 中,但您看不到它。

事实上,每次访问 listView.listItems 属性时,您都会创建表单 1 的新实例并向其 listview1 添加一个项目。

但是在这一行中:

this.listView1.Items.Add("HH");

您正在将项目添加到您所看到的 ListView 中。

了解静态:

关于C# 无法理解静态属性如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32489331/

相关文章:

php - Laravel 在 Controller 中使用公共(public)静态函数是不是很糟糕

python - Django Rest 框架和@staticmethod。它有什么好处呢?

c# - 使用 RegEx c# 从文本中提取电子邮件地址

c# - 使用 Json.NET 将异构 JSON 数组反序列化为协变 List<>

java - 静态上下文中的非静态方法 [比较两组类实例]

c++ - 基类和继承中静态方法中的静态变量

scala - 如何在Scala中将方法限定为静态?

c# - 在代码后面更改 Canvas.Left 属性?

java - .NET 系统加密到 Bouncy CaSTLe Java 解密抛出错误

c# - 将一个字符表示为 utf-16 代码单元