2015-06-07 18 views
40

mã đơn giản:Thừa kế với lớp cơ sở xây dựng với các thông số

class foo 
{ 
    private int a; 
    private int b; 

    public foo(int x, int y) 
    { 
     a = x; 
     b = y; 
    } 
} 

class bar : foo 
{ 
    private int c; 
    public bar(int a, int b) 
    { 
     c = a * b; 
    } 
} 

Visual Studio phàn nàn về "bar" constructor:

Lỗi CS7036 Không có lý luận cho rằng tương ứng với tham số chính thức yêu cầu 'x' của 'foo.foo (int, int)'.

Cái gì ??

Trả lời

78

Vấn đề là lớp cơ sở foo không có hàm tạo tham số. Vì vậy, bạn phải gọi constructor của lớp cơ sở với các thông số từ constructor của lớp được thừa kế:

public bar(int a, int b) 
    : base(a, b) 
{ 
    c = a * b; 
} 
17

Tôi có thể sai, nhưng tôi tin rằng kể từ khi bạn được kế thừa từ foo, bạn phải gọi một constructor cơ sở. Vì bạn đã định nghĩa rõ ràng hàm tạo foo để yêu cầu (int, int), bây giờ bạn cần truyền chuỗi đó lên.

public bar(int a, int b) : base(a, b) 
{ 
    c = a * b; 
} 

Điều này sẽ khởi tạo biến của foo trước và sau đó bạn có thể sử dụng chúng trong thanh. Ngoài ra, để tránh nhầm lẫn, tôi khuyên bạn không nên đặt tên cho các tham số chính xác giống như các biến mẫu. Hãy thử p_a hoặc một cái gì đó thay vào đó, vì vậy bạn sẽ không vô tình được xử lý các biến sai.

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