2011-12-11 33 views
11

Tôi có đoạn mã sau:Tôi có thể kết hợp nhà xây dựng trong C#

public AccountService(ModelStateDictionary modelStateDictionary, string dataSourceID) 
    { 
     this._modelState = modelStateDictionary; 
     this._accountRepository = StorageHelper.GetTable<Account>(dataSourceID); 
     this._productRepository = StorageHelper.GetTable<Product>(dataSourceID); 
    } 

    public AccountService(string dataSourceID) 
    { 
     this._accountRepository = StorageHelper.GetTable<Account>(dataSourceID); 
     this._productRepository = StorageHelper.GetTable<Product>(dataSourceID); 
    } 

Có một số cách mà tôi có thể đơn giản hóa các nhà thầu vì vậy mỗi không nhất thiết phải thực hiện các cuộc gọi StorageHelper?

Ngoài ra, tôi cần phải chỉ định điều này. ?

Trả lời

22
public AccountService(ModelStateDictionary modelStateDictionary, string dataSourceID) 
    : this(dataSourceID) 
{ 
    this._modelState = modelStateDictionary; 

} 

Điều này trước tiên sẽ gọi cho người xây dựng khác của bạn. Bạn cũng có thể sử dụng base(... để gọi hàm tạo cơ sở.

this trong trường hợp này được ngụ ý.

6

Có, bạn có một vài lựa chọn:

1) Tóm tắt logic khởi chung vào phương pháp khác và gọi đó là từ mỗi nhà xây dựng. Bạn sẽ cần phương pháp này nếu bạn cần thiết để kiểm soát trật tự, mỗi item được khởi tạo (tức là nếu _modelState đòi hỏi _accountRepository được khởi tạo sau nó):

public AccountService(ModelStateDictionary modelStateDictionary, string dataSourceID) 
{ 
    this._modelState = modelStateDictionary; 
    Initialize(dataSourceID); 
} 

public AccountService(string dataSourceID) 
{ 
    Initialize(dataSourceID); 
} 

private void Initialize(string dataSourceID) 
{ 
    this._accountRepository = StorageHelper.GetTable<Account>(dataSourceID); 
    this._productRepository = StorageHelper.GetTable<Product>(dataSourceID); 
} 

2) Cascade các nhà thầu bằng cách thêm this ở cuối:

public AccountService(ModelStateDictionary modelStateDictionary, string dataSourceID) : this(dataSourceID) 
{ 
    this._modelState = modelStateDictionary; 
} 

public AccountService(string dataSourceID) 
{ 
    this._accountRepository = StorageHelper.GetTable<Account>(dataSourceID); 
    this._productRepository = StorageHelper.GetTable<Product>(dataSourceID); 
} 
+0

Chỉ để xác nhận. Từ nào "này" nếu tôi có thể loại bỏ? –

+0

Không hoàn toàn rõ ràng những gì bạn đang yêu cầu, nhưng nếu bạn đang hỏi về mã 'this._', bạn có thể xóa tất cả chúng. Ví dụ, 'this._accountRepository' cũng có thể được viết dưới dạng' _accountRepository'. 'Điều này' tôi đang đề cập đến trên cùng một dòng với khai báo hàm tạo (di chuyển tất cả các con đường sang bên phải để xem nó). –

+1

@RichardM: Khá nhiều trong số đó. 'this.' gần như luôn luôn được suy ra trong ngữ cảnh, trừ khi bạn đang truyền vào một biến có cùng tên. Một số người thích nó, trích dẫn khả năng đọc (rõ ràng hơn). Những người khác không thích nó vì lý do tương tự (thông tin dư thừa). –

Các vấn đề liên quan