Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: Thủ tục get trong thuộc tính trong kế thừa C#???

  1. #1
    Ngày gia nhập
    02 2008
    Bài viết
    25

    Mặc định Thủ tục get trong thuộc tính trong kế thừa C#???

    Tại sao trong thuộc tính của C# thủ tục get cần phải khai báo:
    private kiểu thuộc tính. Example:
    Code:
      private string Forename
    Cho mình hỏi thêm:Trong C# luôn hỗ trợ một lớp cơ sở toàn diện gọi là System.Object, mình có 1 ví dụ sau:
    Visual C# Code:
    1. namespace ConsoleApplication1
    2. {
    3.     class Program
    4.     {
    5.         static void Main(string[] args)
    6.         {
    7.             Money T1 = new Money();
    8.             T1.Amout = 40;
    9.             Console.WriteLine("T1.ToString()return:" +T1.ToString());
    10.             Buttermoney T2 = new Buttermoney();
    11.             T2.Amout = 50;
    12.             Console.WriteLine("T2.ToString()return:" +T2.ToString());
    13.             Console.ReadLine();
    14.         }
    15.     }
    16.     class Money
    17.     {
    18.         private decimal amout;
    19.         public  virtual decimal Amout
    20.         {
    21.             get
    22.             { return amout; }
    23.             set
    24.             { amout = value; }
    25.         }
    26.     }
    27.     class Buttermoney : Money
    28.     {
    29.         public override string ToString()
    30.         {
    31.             return "$" +Amout.ToString();
    32.         }
    33.     }
    34. }
    Khi chạy nó sẽ in ra 2 dòng:
    T1.ToString()return: ConsoleApplication1.Money
    T2.ToString()return: $50.
    Nhưng mình muốn dòng thứ nhất nó in ra: T1.ToString()return: $40 thì phải làm thế nào.
    Code:
    return "$" +Amout.ToString();
    Dấu "+" ở đây có ý nghĩa gì vậy, khi mình bỏ đi thì nó cũng in ra như cũ.
    Đã được chỉnh sửa lần cuối bởi NghiDung : 04-05-2008 lúc 10:25 PM.

  2. #2
    Ngày gia nhập
    10 2007
    Nơi ở
    HCMUNS
    Bài viết
    459

    Tại sao trong thuộc tính của C# thủ tục get cần phải khai báo:
    private kiểu thuộc tính. Example:
    Code:

    private string Forename
    Cái này là khai báo thành phần của đối tượng, không dính dáng gì đến get, set cả. Và mặc định trong C# khi bạn ko ghi private thì nó cũng sẽ hiểu là private (nên ghi tường minh)

    Nhưng mình muốn dòng thứ nhất nó in ra: T1.ToString()return: $40 thì phải làm thế nào.
    Để override function ToString lên lớp cha.

    Dấu "+" ở đây có ý nghĩa gì vậy
    Đơn giản chỉ là toán tử nối chuỗi.
    Keep moving forward!

    ... Retired ...

  3. #3
    Ngày gia nhập
    02 2008
    Bài viết
    25

    Trích dẫn Nguyên bản được gửi bởi nhc1987 Xem bài viết
    Để override function ToString lên lớp cha.
    Lớp cha trong bài của mình là Money. Mình đọc tài liệu thì thấy rằng override là dùng trong khai báo của lớp thừa hưởng, còn virtual dùng trong lớp cơ sở. Và mình đã làm theo bạn nói nhưng nó vẫn in ra như cũ.

  4. #4
    Ngày gia nhập
    03 2008
    Bài viết
    57

    Trong lập trình hướng đối tựong thì lớp con , tức lớp kế thừa có quyền truy xuất đến các phương thức khai báo public trong lớp cha từ bên ngoài. Nhưng lớp cha thì không thể truy xuất đến các phương thức của lớp con được.
    Vì thằng cha sinh ra trước nên nó sẽ không có bất cứ thông tin nào về thằng con cả.
    Một đối tượng thuộc lớp con có thể giữ địa chỉ của 1 đối tượng thuộc lớp cha. nhưng một đối tượng thuộc lớp cha không thể giữ địa chỉ của 1 đối tượng lớp con.
    Ví dụ : ta có thể nói một tam giác cân là một tam giác. Nhưng không thể nói một tam giác là tam giác cân.

    Tương tự trong bài của bạn. Lớp Money là lớp cha. Lớp Buttermoney là lớp con kế thừa từ lớp Money
    vậy thì làm sao đối tượng T1 thuộc lớp cha có thể gọi phương thức ToString()
    nằm trong lớp con được.

  5. #5
    Ngày gia nhập
    03 2007
    Bài viết
    179

    Trích dẫn Nguyên bản được gửi bởi NghiDung Xem bài viết
    Lớp cha trong bài của mình là Money. Mình đọc tài liệu thì thấy rằng override là dùng trong khai báo của lớp thừa hưởng, còn virtual dùng trong lớp cơ sở. Và mình đã làm theo bạn nói nhưng nó vẫn in ra như cũ.
    lớp object là lớp cơ sở nên nó là lớp cha của mọi lớp bạn tạo ra ( nhớ là nghe thế ko biết chính xác 100% không nhỉ)

  6. #6
    Ngày gia nhập
    02 2008
    Bài viết
    25

    Mặc định Thủ tục get trong thuộc tính trong kế thừa C#???

    +, T1 là đối tượng thuộc lớp cha money, khi mình gán bất kỳ 1 giá trị nào thì nó đều in ra cùng 1 dòng, như vậy: money là dùng để định nghĩa thuộc tính của đối tượng trong C# (trong vd này) có phải? và nó được gọi là lớp đối tượng?
    +, Trong lớp con chỉ thừa kế public mà không thừa kế private?

  7. #7
    Ngày gia nhập
    02 2008
    Bài viết
    25

    Có phải trong bất kỳ 1 bài OOP nào cũng cần phải tạo lập 1 phương thức để định nghĩa thuộc tính của Object đó?

  8. #8
    Ngày gia nhập
    10 2011
    Nơi ở
    Hưng Yên
    Bài viết
    9

    Cái này là do bạn khởi tạo đối tượng T1 ở trong lớp Monney
    Money T1 = new Money();
    nên khi gọi: T1.ToString() thì máy sẽ không hiểu vì đối tượng T1 trong lớp Buttermoney chưa được khởi tạo.
    Mã code theo ý bạn đây:
    Code:
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                Buttermoney T1 = new Buttermoney();
                T1.Amout = 40;
                Console.WriteLine("T1.ToString()return:" + T1.ToString());
                Buttermoney T2 = new Buttermoney();
                T2.Amout = 50;
                Console.WriteLine("T2.ToString()return:" + T2.ToString());
                Console.ReadLine();
            }
        }
        class Money
        {
            private decimal amout;
            public virtual decimal Amout
            {
                get
                { return amout; }
                set
                { amout = value; }
            }
        }
        class Buttermoney : Money
        {
            public override string ToString()
            {
                return "$" + Amout.ToString();
            }
        }
    }
    Có rì không hỉu thì pm mình :d

Các đề tài tương tự

  1. Bỏ thuộc tính ẩn cho file đã có thuộc tính ẩn trong C#?
    Gửi bởi khanhduy.8hpm trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 10-04-2012, 08:35 PM
  2. Gán thuộc tính cha trong lớp con
    Gửi bởi krapdicen trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 04-04-2011, 03:13 PM
  3. Làm sao để lấy các record trong table làm thuộc tính cho lớp DTO (trong mô hình 3 lớp)
    Gửi bởi vuathongtin trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 12-03-2011, 06:45 PM
  4. lỗi khi thử dùng thuộc tính trong lớp
    Gửi bởi HAOSUP trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 21-12-2010, 03:22 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn