5

Tôi đang cố gắng tạo một lớp nơi người dùng có thể sửa đổi các biến thành viên để thay đổi các đối số mặc định của các hàm thành viên của nó.Có cách nào để có đối số mặc định động không?

class Class 
{ 
    public int Member; 

    public void Method(int Argument = Member) 
    { 
     // This compiles fine, until I try to actually use 
     // the method elsewhere in code! 

     // "Error: need 'this' to access member Member" 
    } 
} 

Cách giải quyết của tôi cho đến nay là sử dụng số ma thuật, điều này rõ ràng không lý tưởng.

public void Method(int Argument = 123) 
{ 
    int RealArgument; 

    if (Argument == 123) RealArgument = Member; 
    else RealArgument = Argument; 
} 

Có cách nào tốt hơn hoặc tôi bị mắc kẹt với giải pháp "hack" này không?

Trả lời

7

Đúng, hãy quên đối số mặc định.

class Class 
{ 
    public int Member; 

    public void Method(int Argument) 
    { 
     ... 
    } 

    public void Method() 
    { 
     Method(Member); 
    } 
} 

Không cần phải làm gì ở đây.

+0

Điều này có thể không thực tế đối với nhiều đối số, nhưng mixin có thể giúp tạo mã tự động. – Maxpm

+0

Sử dụng các mẫu vectơ và đặt tên cẩn thận có thể cho phép bạn nhận được hiệu ứng đó chỉ với hàm cơ bản và một mẫu trình bao bọc duy nhất. – BCS

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