2012-05-08 37 views
7

Ai đó có thể cho tôi biết cú pháp dưới đây có nghĩa là gì?Cú pháp "cơ sở" có nghĩa là gì?

public ScopeCanvas(Context context, IAttributeSet attrs) : base(context, attrs) 
{ 
} 

Tôi muốn nói gì là method(argument) : base(argument) {} ??

P.S Đây là hàm tạo của lớp.

+2

Đó là một hằng số chứ không phải là phương pháp. – Gabe

+2

Tôi tin rằng nếu một câu hỏi có nhiều hơn 5 câu trả lời trong vòng chưa đầy hai phút, nó không nên được hỏi. @ Sean87 bạn có thể dễ dàng google "Từ khóa cơ sở C#" – SimpleVar

+3

[Google sẽ cung cấp cho bạn câu trả lời nhanh hơn nhiều] (https://www.google.com/search?q=C%23+base&ie=utf-8&oe=utf-8&aq= t & rls = org.mozilla: en-US: chính thức & khách hàng = firefox-a), sau đó là StackOverflow. (@Yorye Nathan - chính xác là quan điểm của tôi.) – zmilojko

Trả lời

17

Cú pháp :base là một cách cho một kiểu dẫn xuất để chuỗi tới một hàm tạo trên lớp cơ sở chấp nhận đối số được chỉ định. Nếu bỏ qua trình biên dịch sẽ âm thầm cố gắng liên kết với một hàm tạo lớp cơ sở chấp nhận 0 đối số.

class Parent { 
    protected Parent(int id) { } 
} 

class Child1 : Parent { 
    internal Child1() { 
    // Doesn't compile. Parent doesn't have a parameterless constructor and 
    // hence the implicit :base() won't work 
    } 
} 

class Child2 : Parent { 
    internal Child2() : base(42) { 
    // Works great 
    } 
} 

Ngoài ra còn có các :this cú pháp mà cho phép chaining đơn vị thi công trong cùng loại với một danh sách đối số quy định

+0

+1: Giải thích hoàn hảo. –

+0

** "Nếu bỏ qua trình biên dịch sẽ âm thầm cố gắng liên kết với một hàm tạo lớp cơ sở chấp nhận 0 đối số." ** Đây là phần quan trọng nhất của lời giải thích - cảm ơn. – Sabuncu

3

lớp học của bạn có khả năng được định nghĩa như thế này:

MyClass : BaseClass 

Nó bắt nguồn từ một số lớp khác. : base(...) trên hàm tạo của bạn gọi hàm tạo thích hợp trong lớp cơ sở trước khi chạy mã trong hàm tạo của lớp dẫn xuất của bạn.

Here là câu hỏi có liên quan.

EDIT

Theo ghi nhận của Tilak, các MSDN documentation on the base keyword cung cấp một lời giải thích tốt.

2

Nó kêu gọi các nhà xây dựng từ lớp cơ sở thông qua các đối số contextattrs

1

Bạn lớp được kế thừa từ một baseclass, và khi bạn intialize một đối tượng kiểu ScopeCanvas, hàm tạo cơ sở được gọi với một danh sách tham số (context, attrs)

1

Điều này có nghĩa rằng constructor này có hai đối số, và chuyển chúng đến các đối tượng xây dựng kế thừa. Một ví dụ dưới đây chỉ với một đối số.

Public class BaseType 
{ 
    public BaseType(object something) 
    { 

    } 
} 

public class MyType : BaseType 
{ 
    public MyType(object context) : base(context) 
    { 

    } 
} 
2

Đây là một constructor lớp quá tải trừu tượng mà cho phép initilizing của lý luận về sự và các lớp cơ sở có nguồn gốc và xác định nếu một nhà xây dựng quá tải là để được sử dụng. LINK

public class A 
{ 
    public A() 
    { } 
    public A(int size) 
    { } 
}; 

class B : public A 
{ 
    public B() 
    {// this calls base class constructor A() 
    } 
    public B(int size) : base(size) 
    { // this calls the overloaded constructor A(size) 
    } 
} 
0

Trong ví dụ trên tất cả đang nói về : cơ sở không ai đang về cơ sở. Có cơ sở là sử dụng để truy cập thành viên của cha mẹ nhưng không giới hạn với hàm tạo chỉ chúng tôi có thể sử dụng base._parentVariable hoặc base._parentMethod() trực tiếp.

base. example

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