首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 善用建構函數初始化語句

     編輯:關於C語言

問題:多載建構函數的重複程式碼

傳統做法抽取共用初始化方法:

public class MyClass {
    private int _age; private string _name;
    public MyClass(string name) { InitMember(name, 20); }
    public MyClass(string name, int age) { InitMember(name, age); }
    private void InitMember(string name, int age) { _age = age; _name = name; }
}

更優雅的寫法:this(...) 鏈式呼叫

public class MyClass {
    private int _age; private string _name;
    public MyClass(string name) : this(name, 20) { }
    public MyClass(string name, int age) {
        _age = age; _name = name;
    }
}

呼叫基類建構函數:base(...)

public class MyClass : BaseClass {
    private int _age; private string _name;
    public MyClass(string name) : this(name, 20) { }
    public MyClass(string name, int age) : base(name, age) {
        _age = age; _name = name;
    }
}

限制:this 與 base 不能同時出現在同一個初始化語句中。

readonly 欄位初始化

readonly 欄位僅能在宣告時或建構函數中賦值,無法在一般方法中修改。建構函數初始化語句天然支援此需求。

總結比較

面向建構函數初始化語句私有初始化方法
效能相同相同
程式碼結構清晰、無重複較清晰但有重複呼叫
基類呼叫直接支援無法直接呼叫
readonly 支援支援不支援
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved