I have created a sample program below.In this program I expect two things without lock 

1. I have to override the ToString() method and this method should support concurrent readers.
2. It should be thread safe

. 

```
using System.Collections.Generic;
using System.Linq;

namespace Second.App
{
    class Program
    {
        static void Main(string[] args)
        {
            var sampleClass=new SampleClass();
            sampleClass.AddString("Apple");
            sampleClass.AddString("Orange");
            string allStr =  sampleClass.ToString();
        }
    }
    public class SampleClass:SecondClass
    {
        public override void AddString(string text)
        {
            base.AddString(text);
        }
        public override string ToString()
        {
            return base.ToString();
        }
    }
    public  class SecondClass
    {
        private readonly List<string> _collection = new List<string>();
        public virtual void AddString(string text)
        {
            _collection.Add(text);
        }

        public override string ToString()
        {
            const string delimiter = ",";
            return _collection.Aggregate((i, j) => i + delimiter + j);
        }
    }
}

```

Hope some good answers..