星期三, 9月 10, 2014

[C#] 呼叫父建構子

MVA Twenty C# Questions Explained - [05 How do you call a base constructor in C#?]
namespace MVATwentyQuestions
{
    class Test
    {
        // 故意用 public 來方便 demo,實務上應該設為 private
        public string _name = "";

        public Test(string name)
        {
            _name = name;
        }

        public virtual void ConvertToUpper()
        {
            _name = _name.ToUpper();
        }
    }
}
namespace MVATwentyQuestions
{
    class InheritTest : Test
    {
        // 錯誤的呼叫方式
        // base("NewName");

        // Demo1 和 Demo2 只能存在一個,請自行轉換 comment 來觀察結果

        // demo1:正確呼叫 base 的方式
        public InheritTest(string name): base(name)
        {

        }

        // demo2:呼叫 base 前,先利用 method 把參數都變成大寫
        public InheritTest(string name): base(ModifyBase(name))
        {

        }

        private static string ModifyBase(string newName)
        {
            return newName.ToUpper();
        }
    }
}
namespace MVATwentyQuestions
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine();
            Test nTest = new Test("Base");
            Console.WriteLine(nTest._name);

            InheritTest iTest = new InheritTest("NewName");
            Console.WriteLine(iTest._name);
        }
    }
}

Demo1 結果
[C#] 呼叫父建構子 -1

Demo2 結果
[C#] 呼叫父建構子 -2

沒有留言:

張貼留言