Em hiểu như thế này về Class C# có đúng không ạ?
Em có vài câu hỏi về class trong C# mong các bác nhiệt tình giúp đỡ (Lấy ví dụ trực quan dễ hiểu thì càng tốt ạ)
-
Class gồm 2 phần chính là thuộc tính và phương thức đúng không ạ? Theo cách em hiểu thì thuộc tính là đặc điểm thông tin về class đó, còn phương thức là các hoạt động Class đó có thể làm. Ví dụ như class Car thì thuộc tính là chiều dài xe, trọng lượng xe, tốc độ xe, v.v còn phương thức xe là đi, bấm còi, v.v. Em hiểu thế có đúng không ạ?
-
Constructors là hàm khởi tạo, nếu mình không khai báo gì thì khi một Object được tạo ra thì nó sẽ có sẵn thông tin ở trong constructors đúng không? Ngoài mục đích chính là chứa dữ liệu mặc định thì constructors còn để kiểm soát truy cập? Ví dụ như không thể cho người dùng khai báo tốc độ xe là giá trị âm được => Kiểm soát bằng constructors ?
-
Có những thành phần gì trong Class được đặt tên trùng nhau? Từ this có ý nghĩa gì ạ?
-
Property là gì ạ?
Mình không học C#. Nhưng nói chung cũng có biết tới OOP nhừ Python và PHP
Nói về constructors trước đi. Nó giống như là một khuôn mẫu cho lớp đó vậy. Có nghĩa là các thuộc tính trong constructor sẽ được gán cho bất kì đối tượng nào thuộc lớp đó. Do đó sẽ đồng nhất. Nếu không có constructor bạn phải khai báo ngoài có thể bạn sẽ bỏ quên khiến hai đối tượng cùng lớp đôi khi không có chung cái thuộc tính. Và đương nhiên constructor giúp rút gọn lại việc khai báo thuộc tính nữa. (google là ra nghĩa constructor là hiểu vấn đề)
Mình nghĩ là không. Nếu bạn muốn kiểm soát thì khai báo
private
hoặc làprotected
sau đó cho mộtmethod
làsetSpeed
.Mình nghĩ là không [quote=“Phim_Hanh_Dong, post:1, topic:49320”]
Từ this có ý nghĩa gì ạ?
[/quote]
Nó đại diện cho
instance
Ví dụ cómethod
Khi bạn
invoke method
Khi bạn
invoke
như vậy thì nó sẽ tìm tớimethod sayHello
và bắt đầu thay thế tất cả những từthis
thànhobject invoke
nó. Do đó nó sẽ trở thành một dạng giốngfunction
Là thuộc tính của nó. Một số người hay dùng là attribute. Thật sự 2 từ này không có khác nhau đâu.
Constructor là hàm khởi tạo. Có thể coi như một phương thúc đặc biệt. Mặc định sẽ được chạy đầu tiên khi khởi tạo đối tượng. Có mục đích là tạo nên đối tượng hoặc tạo các thiết đặt mặc định cho đối tượng. Chứ nó không chứa cái hay kiểm soát cái gì.
Destructor thì ngược lại, chạy lần cuối cùng trước khi hủy đối tượng.
Trong một scope, tức là sau ký tự mở scope “{” và đóng scope “}” thì không được có tên trùng nhau.
Từ this đại diện cho chính nó. Chính cái class đang viết code.
Property là thuộc tính.
Cấu tạo bởi 1 hoặc 2 khối lệnh get , set. Khối get để lấy dữ lieu trong đối tượng ra, set là cài đặt giá trị vào dữ lieu bên trong đối tượng. Kết hợp với các từ khóa private, protected… sẽ cho nhiều property đặc tính khác nhau.
Nó giúp cho việc trao đối dữ lieu và vẫn đảm bảo tính đóng gói (ẩn dấu dữ lieu), tránh truy cập trực tiếp vào dữ lieu của đối tượng.
đây là về Property tronng c# bạn à https://www.tutorialspoint.com/csharp/csharp_properties.htm
cái này sau khi học về tính bao đóng của oop thì bạn sẽ hiểu ẽo về vấn đề này hơn bạn à cái này sẽ giúp bạn truy cập các thuộc tính nhanh và dễ dàng hơn
thì từ khóa thí trong trường hợp này để dùng để hiểu rằng là this.a là biến a trong ctor chứ ko phải là biến a trong cái class đó
@Do_Nhien: bạn nên coi lại về từ khóa this trong C#. Mình thấy bạn giải thích sai rồi.
this
khi được sử dụng trong một class là để chỉ đến đối tượng đang xét.Ví dụ class A được khai báo như sau:
Vậy thì 2 phương thức
abc1
vàabc2
hoàn toàn giống nhau.Từ khoá
this
cũng được sử dụng để làm cho câu lệnh sáng sủa hơn. Ví dụ 2 cách viết hàm tính khoảng cách từ điểm (150,220) trên màn hình đến vị trí của đối tượng đang xét:Hoặc mình có thể dùng
this
để làm tham số, toán hạng… bởi vìthis
cũng là 1 đối tượng mà.vâng may quá em cảm ơn để em học lại anh ạ mà anh có thể nói cho em biết em sai chỗ nào vậy ạ
Như bạn @noz1995 nói ở trên.
với đoạn code trên thì lấy biến a của đối tượng đang gán vào paramater a.
Để hiểu rõ hơn bạn có thể xem thêm sự khác nhau giữa field và property
stackoverflow.com
What is the difference between a field and a property?