编写代码,定义一个基类MyClass,其中包含虚拟方法GetString()。(C#)

编写代码,定义一个基类MyClass,其中包含虚拟方法GetString()。这个方法应返回存储在
受保护字段myString中的字符串,该字段可以通过只写公共属性ContainedString来访问。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace name1
{
    abstract class Progrom
    {
        static void Main(string[] args)
        { }
    }
    public abstract class Myclass
    {
        private string myString;
        public string ContainedString
        {
            set
            {
                myString = value;
            }
        }
        public void MyClass(string str)
        {
           myString = str;
        }
        public virtual string GetString()
        {
            return myString;
        }
    }
}

从类MyClass中派生一个类MyDerivedClass。重写GetString()方法,使用该方法的基类实现
代码从基类中返回一个字符串,但在返回的字符串中添加文本“(outputfromderivedclass)。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
namespace ConsoleApplication4
{
        class Program
        {
            static void Main(string[] args)
            {
                MyCopyableClass myCpyClass = new MyCopyableClass();
                myCpyClass.Val = "Hello world!";
                MyCopyableClass newClass = myCpyClass.GetCopy();
                WriteLine(newClass.Val);
                ReadKey();
            }
        }
    class MyCopyableClass : System.Object
    {
        private string Name;

        public string Val
        {
            get
            {
                return Name;
            }
            set
            {
                Name = value;
            }

        }
        public MyCopyableClass() { }
        public MyCopyableClass GetCopy()
        {
            return (MyCopyableClass)this.MemberwiseClone();
        }
    }
}