none
關於列舉和構造函數鏈的使用 RRS feed

  • 問題

  • 大家好, 我遇到當構造函數使用列舉成員當作成員處理時的問題 , 請前輩們指點, 感恩

    namespace ObjectInitializers
    {
        public enum PointColor
        { LightBlue, BloodRed, Gold }
    
        class Point
        {
            public int X { get; set; }
            public int Y { get; set; }
            public PointColor Color { get; set; }
    
            public Point( int xVal, int yVal )
            {
                X = xVal;
                Y = yVal;
                Color = PointColor.Gold;
            }
    
            public Point( PointColor ptColor )
            {
                Color = ptColor;
            }
    
            public Point()
                : this(PointColor.BloodRed) { }
    
            public void DisplayStats()
            {
                Console.WriteLine("[{0}, {1}]", X, Y);
                Console.WriteLine("Point is {0}", Color);
            }
        }
    }


    在上面的程式碼中有三個自定義構造函數 , 這個子構造函數

    public Point()
                : this(PointColor.BloodRed) { }

    會將 PointColor.BloodRed 傳給下面的主構造函數

    public Point( PointColor ptColor )
            {
                Color = ptColor;
            }

    Q: 為何主構造函數接受的參數不能寫成 PointColor.BloodRed  , 而是用PointColor ptColor 這個參數名稱 ? (我試過 , 會出現編譯錯誤...)

    2016年6月9日 上午 11:43

解答

  • public Point( PointColor ptColor ) <--- 建構式基本上就是一種 Method , 所以小括弧內是參數宣告 , 而PointColor.BloodRed 是個常值

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 阿燦 2016年6月9日 下午 12:35
    2016年6月9日 上午 11:57
    版主
  • 宣告參數必須指定參數的型態. 將參數宣告成:

    PointColor.BloodRed  

    並未宣告參數的型態

    • 已標示為解答 阿燦 2016年6月9日 下午 12:35
    2016年6月9日 上午 11:59

所有回覆

  • public Point( PointColor ptColor ) <--- 建構式基本上就是一種 Method , 所以小括弧內是參數宣告 , 而PointColor.BloodRed 是個常值

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 阿燦 2016年6月9日 下午 12:35
    2016年6月9日 上午 11:57
    版主
  • 宣告參數必須指定參數的型態. 將參數宣告成:

    PointColor.BloodRed  

    並未宣告參數的型態

    • 已標示為解答 阿燦 2016年6月9日 下午 12:35
    2016年6月9日 上午 11:59
  • 感謝兩位前輩解答! 原來PoinColor.BloodRed 列舉成員在這裡是當作成常值 , 難怪沒辦法直接使用.....

    那我又有一個問題 , public PointColor Color 這個屬性的型別一定要跟列舉的名稱 PointColor 一樣嗎 ?

    是為了主構造函數能接收 PointColor.BloodRed 這個列舉成員常值嗎?

    我有試過把 PointColor Color 屬性的型別改成別的 , PointColor ptColor 參數也改成其他的型別 , 但是不能通過編譯.....

    2016年6月9日 下午 12:45
  • 是為了將主構造函數的參數存放到Color屬性, 所以主構造函數的參數型態必須和Color屬性的型態相同
    2016年6月9日 下午 11:26