01/10/2018, 08:49

Thuộc tính trong abstract class c#

như tiêu đề em muốn hỏi khi 1 thuộc tính trong abstract class em dùng ví dụ như
public double ThuocTinh{get;set;}
thì có hoàn toàn sai không ạ
Thầy của em phủ nhận hoàn toàn cách khai báo này cho rằng (ngu ngốc)
phải là:
protected double ThuocTinh{get;set;}

Văn Dương viết 11:00 ngày 01/10/2018

Sao không hỏi luôn ông ấy là tại sao ?

Hoàng Long viết 10:55 ngày 01/10/2018

thầy chỉ sai r thầy chửi thôi chưa lần nào giải thích cho sinh viên nghe dùng để làm gì như thầy chỉ làm cho sinh viên chép thôi :’(

Văn Dương viết 11:02 ngày 01/10/2018

Thế thầy lởm rồi :))
Quả thật tui chưa thấy quy định nào và tất cả các mã nguồn tôi xem có protected cả.

Hoàng Long viết 10:54 ngày 01/10/2018

hôm nay em thực sự khó hiểu phần không biết mình đúng hay sai trong khi code vẫn chạy phần thì những câu nói của thầy có tính xúc phạm sinh viên

Quân viết 10:52 ngày 01/10/2018

Thầy dởm rồi, chẳng có quy định nào về access modifier cả, có chăng chỉ là khuyến khích nên dùng theo 1 mẫu nào đó, ngoài ra việc dùng access modifier nào là tùy thuộc vào thiết kế chứ áp dụng máy móc thế thì sao ra được chương trình

Văn Dương viết 11:00 ngày 01/10/2018

Bây giờ nhé :
Cậu viết 1 class A có protected property và 1 class B kế thừa A

public abstract class A{
    protected int MyProperty{get;set;}
}

public class B:A{
}

Cậu khởi tạo đối tượng B xem nó có thuộc tính MyProperty không ?

Hoàng Long viết 10:58 ngày 01/10/2018

public abstract class A{
protected int MyProperty{get;set;}
}
public class B:A{
}

em hiểu rồi cảm ơn anh nhiều nhé

Đăng Trần viết 10:52 ngày 01/10/2018

Chửi mà không dạy thì tào thật. Em khổ rồi ráng luyện vài khóa opp đi mai mốt đỡ khổ, tức ổng ra mặt thì có bị đì chứ có cho ổng bỏ dạy được đâu. Anh mà còn lải nhải hong chừng ổng bay vô đây chửi anh nữa à.

Tao Không Ngu. viết 10:59 ngày 01/10/2018

Hi Hoàng Long.
Có vấn đề gì nhỉ sao mình không hiểu gì hết vậy ?

Hoàng Long viết 10:56 ngày 01/10/2018

em cảm ơn bác thiệc là oop em tự học và hiểu hết rồi nhưng những khi em có thắc mắc nhỏ em hỏi thầy thì thầy cứ xua tay như kiểu làm sao cũng được

Hoàng Long viết 10:52 ngày 01/10/2018

chuyện em học một thầy dạy oop bắt em khai báo thuộc tính ở abstract class kiểu protected và không cho em dùng public 1 project nhỏ là tính điểm thi thí sinh gồm các thuộc tính tên, số báo danh , điểm từng môn

Tao Không Ngu. viết 10:52 ngày 01/10/2018

Mình muốn hỏi là tại sao. bạn nói là hiểu rồi thì thiểu cái gì chứ ? Mình vẫn không hiểu lám.
@Duong_Act (xin lỗi vì tag tên) Vào khai sáng với @_@!

Hoàng Long viết 11:00 ngày 01/10/2018

à mình hiểu là dùng protected thì biến đó chỉ cha con dùng dược ví dụ cái MyProperty không thể gọi được ở class khác còn public thì chỗ nào cũng gọi được rất tiện nhưng mình thắc mắc là tại sao thầy mình chỉ bắt dùng protected thôi
public abstract class A{
protected int MyProperty{get;set;}
}
public class B:A{
}

Tao Không Ngu. viết 10:53 ngày 01/10/2018

Theo mình cái này còn tùy vào thiết kế nữa.
Trong C# get set là thay thế cho việc viết hàm Geter và Seter…
Nếu bạn không muốn tạo get set nữa thì khai báo luôn nó là biến đi để get set làm gì nữa. Chỉ trong các trường hợp mà lớp con phải thay đổi giá trị biến qua các hàm mà lớp cha cấp thì mới cần get set.


public abstract class Nguoi
        {
            public Nguoi(uint tuoi, string ten)
            {
                Init();
                this.Ten = ten;
                this.Tuoi = tuoi;
            }

            public string Ten
            {
                get;
                protected set;
            }

            public uint Tuoi
            {
                get
                {
                    return this.tuoi;
                }
                protected set {
                    if(value > Nguoi.FLAG)
                    {
                        this.chuongThanh = false;
                    }
                    this.tuoi = value;
                }
            }

            public bool ChuongThanh
            {
                get
                {
                    return chuongThanh;
                }
            }

            private static readonly int FLAG = 18;
            private bool chuongThanh;
            private uint tuoi;

            private void Init()
            {
                this.tuoi = 0;
                this.chuongThanh = false;
            }
        }

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

Trước giờ mình toàn viết mấy thứ vớ vẩn nên chủ yếu là khai báo public. Có 1 lần phải dùng {get;set;} là lúc dùng ListView bên WPF, phải dùng get set thì bên XAML nó mới nhận diện được để fill dữ liệu

Tao Không Ngu. viết 11:02 ngày 01/10/2018

Hi Trần Hoàn
Việc để mọi thứ public là một thói quen xấu. Giống như việc bạn để máy tính cho mọi người ai dùng cũng được.

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

<<>pu> <<>TAB> thì nhanh hơn :)) Không phải là mình không biết mà là không cần phải cứng nhắc nếu như mình không định publish nó.

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

nhưng vấn đề đó là lớp abstract mà bạn .Lớp đó ko khởi tạo được đối tượng mà nên khai báo như vậy thì chỉ có các lớp kế thừa mới dùng được mà

Văn Dương viết 10:54 ngày 01/10/2018

Khi dùng protected thì chỉ tại lớp chứa nó và lớp kế thừa mới truy xuất được. Còn public thì ngoài lớp kế thừa cũng truy xuất được.

Như vậy thì dùng protected hay public là do ý đồ của người thiết kế đối tượng quy định. Như ví dụ mình đã nêu, nếu giờ lớp đối tượng B,C,D,…kế thừa A và cũng có MyProperty thì phải khởi tạo lại MyProperty ở tất cả các lớp kế thừa A. Đó là 1 việc rất là “rảnh háng” và việc kế thừa A không mang lại cái ý nghĩa gì cả.

Tao Không Ngu. viết 11:02 ngày 01/10/2018

Đúng nếu code chỉ có mình bạn dùng.

Bài liên quan
0