首页 > 其他分享 >谨慎集合的属性的可写操作

谨慎集合的属性的可写操作

时间:2022-12-17 13:55:13浏览次数:47  
标签:Students studentList 谨慎 StudentTeamA 集合 new public 属性

在对集合进行线程间的操作时要分外小心,集合属性开放可写操作。由于集合是引用类型,在两个线程中改变同一个集合,可能会导致另一个线程访问时出错。

 

class Student
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }

 

class StudentTeamA
    {
        public List<Student> Students { get; set; }
    }
class Program
    {
        static List<Student> studentList = new List<Student>()
        {
           new Student(){Name = "Janeliy",Age = 19},
           new Student(){Name = "Machial",Age = 22}
        };
        static void Main(string[] args)
        {
            StudentTeamA studentTeamA = new StudentTeamA();
            Thread thread01 = new Thread(() =>
            {
                studentTeamA.Students = studentList;
                Thread.Sleep(1000);
                Console.WriteLine(studentList.Count); // 模拟对集合属性进行运算
            });
            thread01.Start();
            Console.WriteLine("Hello World!");

            Thread thread02 = new Thread(() =>
            {
                studentList = null;
            });
            thread02.Start();
        }
    }

上面是第一次对集合属性进行操作。

在上面对集合的运算,因为是线程对“当集合成为属性时的可写方法进行限制”,所以我认为不应该是对外面的studentList集合进行修改;改成对studentTeamA.Students的修改和输出,结果都是为null。

下面对StudentTeamA进行修改:限制了写方法,但还是开放了对其list集合的赋值。

 

class StudentTeamA
    {
        public List<Student> Students { get; private set; }

        public StudentTeamA()
        {
            Students = new List<Student>();
        }

        public StudentTeamA(IEnumerable<Student> studentList) : this()
        {
            Students.AddRange(studentList);
        }
    }

 

 

 

总结:该篇的主旨思想就是告诉我们,集合属性不能随便开放写操作。

 

标签:Students,studentList,谨慎,StudentTeamA,集合,new,public,属性
From: https://www.cnblogs.com/wen-chen/p/16988703.html

相关文章

  • 第十三章《集合》第2节:List集合
    List这个单词意为“列表”,List类型的集合的特点是:元素呈线性排列,致密且有序。下面的图13-3展示了List类型集合的特点。图13-3List类型集合图13-3中的每一个小圆形代表一个......
  • android自定义属性
    1、引言对于自定义属性,大家肯定都不陌生,遵循以下几步,就可以实现:1.自定义一个CustomView(extendsView)类2.编写values/attrs.xml,在其中编写styleable和item等标签元素3.......
  • open淘宝酒店API open淘宝属性API open淘宝类目API
    首先,在类目属性API下面我找到一个接口:taobao.itemcats.getpublicfunctiongetAll()//初始化淘宝API,将一些配置参数引入进来......
  • PHP 获取二维数组中某个key的集合
    本文为代码分享,也是在工作中看到一些“大牛”的代码,做做分享。具体是这样的,如下一个二维数组,是从库中读取出来的。代码清单: 1.$user=array(2.array(3.'id'......
  • 企业级自定义表单引擎解决方案(十八)--列表视图属性设置
    表格对于后台管理类的系统来说,至关重要,系统大多数功能都需要以表格的方式展示业务内容,系统开发人员多数时间也是围绕着表格进行业务编码,接触过很多后台管理系统的框架,我个......
  • 判断两个Map集合是否相等
    原文链接:判断两个Map集合是否相等较原文修改了一个map为null时的空指针bug用途判断数据是否有差异代码importlombok.extern.slf4j.Slf4j;importorg.apache.commo......
  • 集合转数组 toArray
    使用集合转数组的方法,必须使用集合的toArray(T[]array),传入的是类型完全一致、长度为0的空数组。反例:直接使用toArray无参方法存在问题,此方法返回值只能是Object[]......
  • 万字长文深入理解java中的集合-附PDF下载
    目录​​1.前言​​​2.List​​2.1fail-safefail-fast知多少​​​2.1.1Fail-fastIterator​​​​2.1.2Fail-fast的原理​​​​2.1.3Fail-safeIterator​​​......
  • 表格怎么做,鼠标可以拖动,可以滑动,增添表格属性怎么操作?
    表格居然还可以这么做!......
  • python 操作redis有序集合
      https://feeler.blog.csdn.net/article/details/103100452?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogComme......