01/10/2018, 10:17

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 ạ)

  1. 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 ạ?

  2. 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 ?

  3. Có những thành phần gì trong Class được đặt tên trùng nhau? Từ this có ý nghĩa gì ạ?

  4. Property là gì ạ?

Henry viết 12:32 ngày 01/10/2018

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 đề)

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 đặ

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ột methodsetSpeed.

protected speed;
public function setSpeed(inputSpeed) {
    if (!(inputSpeed < 0)) {
        this->speed = inputSpeed;
    else {
        echo "Speed mustn't be negative";

Có những thành phần gì trong Class được đặt tên trùng nhau?

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

public function sayHello() {
    echo "My name is " + this->name;

Khi bạn invoke method

obj = new Person();
obj.name = 'Nam';
obj.sayHello()

Khi bạn invoke như vậy thì nó sẽ tìm tới method sayHello và bắt đầu thay thế tất cả những từ this thành object invoke nó. Do đó nó sẽ trở thành một dạng giống function

public function sayHello() {
    echo "My name is " + obj->name;
    // same as echo "My name is " + "Nam";

Property là gì ạ?

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.

Văn Dương viết 12:25 ngày 01/10/2018
  1. Không. Ngoài thuộc tính và phương thức, class còn chứa nhiều thứ khác.
public delegate void DelegateType();

public class MyClass{
    public MyClass(){} // <-- constructor
    ~MyClass(){} //<-- destructor
    public int MyProperty{get;set;} // <-- property
    public void MyMethod(){}; // <-- method
    public static void MyFuntion(){};// <-- function
    public DelegateType MyDelegate; // <-- delegate
    public event DelegateType MyEvent; // <-- event
    
    public class OrtherClass{..} // <- orther class
    //....
}

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.

public class MyClass{
    public object Property1{ // <- vừa lấy giá trị vừa gán giá trị được
         get{
         }
         set{
         }
     }
     public object Property1{ // <- chỉ lấy giá trị , không gán giá trị được, 
         get{
         }
     }
     public object Property1{ // <- chỉ gán được giá trị (chắc không có loại này)
         set{
         }
     }
     public object Property1{ // <- lấy giá trị nhưng chỉ trong class mới gán giá trị được
         get{
         }
         private  set{
         }
     }
     public object Property1{ // <-  lấy giá trị nhưng chỉ class và class kế thừa mới gán giá trị được
         get{
         }
        protected  set{
         }
     }
     .....
}
Đỗ Nhiên viết 12:24 ngày 01/10/2018

đâ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

Đỗ Nhiên viết 12:25 ngày 01/10/2018
đùa thế ko có cách nào insert hả bác hay cứ thế mà viết thôi à
Đỗ Nhiên viết 12:26 ngày 01/10/2018
  1. từ khóa this là dùng để chỉ cái biến trong phạm vi của hàm đó vd đây là một contruct trong c#
private int a;
private int b;
private int c
public Abc(int a,int b,int c)
{
        a=this.a;
        b=this.b;
        c=this.c;
}

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 đó

vũ xuân quân viết 12:20 ngày 01/10/2018

từ khóa this là dùng để chỉ cái biến trong phạm vi của hàm đó vd đây là một contruct trong c#

private int a;
private int b;
private int c
public Abc(int a,int b,int c)
{
a=this.a;
b=this.b;
c=this.c;
}

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.

Trần Hoàn viết 12:26 ngày 01/10/2018

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:

class A
{
	int param1;
	public abc1(int Input)
	{
		param1 = Input;
	}
	public abc2(int param1)
	{
		this.param1 = param1;//Nếu không có this, phương thức sẽ hiểu param1 trong vế trái là tham số của hàm
	}
}

Vậy thì 2 phương thức abc1abc2 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:

Distance(new Point(150, 220), Position)
Distance(new Point(150, 220), this.Position)

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à.

Đỗ Nhiên viết 12:22 ngày 01/10/2018

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 ạ

vũ xuân quân viết 12:19 ngày 01/10/2018

Như bạn @noz1995 nói ở trên.

private int a;
private int b;
private int c
public Abc(int a,int b,int c)
{
a=this.a;
b=this.b;
c=this.c;
}

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.

Đào An viết 12:31 ngày 01/10/2018

Property là gì ạ?

Để 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?

c#, properties, field
asked by Anonymous on 08:41AM - 17 Nov 08

Bài liên quan
0