Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 6 của 6
  1. #1
    Ngày tham gia
    Dec 2015
    Bài viết
    0

    hỏi về Overload trong C#

    Mình mới làm quen với C# và học hành còn lan man quá hôm nay xem lại phần Overload có đoạn này không hiểu rõ lắm


    class TestOverload
    {
    public TestOverload()
    {
    Console.WriteLine("ham thu nhat");
    }

    public TestOverload(float a)
    {
    Console.WriteLine("day la bien kieu float {0}", a);
    }
    public TestOverload(byte a)
    {
    Console.WriteLine("day la bien kieu byte {0}", a);
    }
    public TestOverload(int a)
    {
    Console.WriteLine("day la bien kieu int {0}", a);
    }


    }
    class Program
    {
    static void Main(string[] args)
    {
    TestOverload mang = new TestOverload(5);
    TestOverload mang2=new TestOverload(10F);
    Console.ReadLine();
    }
    }
    mình muốn hỏi mọi là làm sao để phân biệt được tham số truyền vào là kiểu int hay là byte, trong đoạn code trên thì constructor có tham số int và float được gọi thôi, còn kiểu byte thì lại không được gọi

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    kiểu byte nó là một số nguyên ko dấu từ 0-255. còn kiêu int nó có giá trị khá lớn và có dấu nữa.
    bạn có thể khai báo kiểu của biến rồi truyền vào. thông thường mặc định nếu bạn truyền vào một số nguyên thì nó là kiểu int.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Như bạn nguyen my nói đó . Bạn khai báo 1 biến kiểu byte sau đó truyền vào . . chứ truyền vào 1 số nguyên thì nó sẽ nhận kiểu int thôi [IMG]images/smilies/biggrin.png[/IMG]

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi nguyen my
    kiểu byte nó là một số nguyên ko dấu từ 0-255. còn kiêu int nó có giá trị khá lớn và có dấu nữa.
    bạn có thể khai báo kiểu của biến rồi truyền vào. thông thường mặc định nếu bạn truyền vào một số nguyên thì nó là kiểu int.
    vậy nếu như tạo thêm 1 constructor đối số truyền vào là sbyte và xóa constructor đối số truyền vào là kiểu int đi , sau đó khởi tạo đối tượng mới và truyền vào đó là 5 chẳng hạn thì constructor nào được gọi vậy ...?
    Nhân tiện thì bạn có thể kể ra thứ tự ưu tiên của không (ví dụ như bạn nói mặc định ban đầu nếu là số nguyên thì là int vậy nếu không có int thì ưu tiên tiếp theo sẽ là kiểu gì...)
    Mình mới học nên còn nhiều vướng mắc , cảm ơn bạn đã giải thích dùm [IMG]images/smilies/online.gif[/IMG][IMG]images/smilies/online.gif[/IMG]

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    using System;
    class TestOverload
    {
    public TestOverload(sbyte a)
    {
    Console.WriteLine("day la bien kieu sbyte {0}", a);
    }
    public TestOverload(byte a)
    {
    Console.WriteLine("day la bien kieu byte {0}", a);
    }
    }
    class Program
    {
    static void Main(string[] args)
    {
    TestOverload mang = new TestOverload(5);
    Console.ReadLine();
    }
    }
    Tớ đã test thử như trên, với cái số 5 cậu truyền vào nó ra kiểu sbyte nhé
    Tớ nghĩ, int là mặc định, nếu không có int nó sẽ tìm trong các method còn lại( có 2 cái byte và sbyte). Như sau:
    - Nếu giá trị chỉ thuộc 1 kiểu byte hoặc sbyte ví dụ 200 chỉ thuộc kiểu byte thôi, -50 chỉ thuộc kiểu sbyte thôi, thì ko phải tranh cãi,nó gọi hàm duy nhất tương ứng.
    - Nếu giá trị truyền vào là 5 chẳng hạn, thuộc cùng 2 kiểu dũ liệu nên nó ưu tiên sbyte. Còn tại sao ưu tiên sbyte thì mình cũng ko rõ .hj.

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trước khi học hàm chồng thì phải học các kiểu dữ kiệu căn bản và cách chuyển đổi loại dữ liệu.
    Học kiểu đốt giai đoạn như thế này thì còn sẽ rắc rối dài dài.

    TestOverload t1 = new TestOverload(5); // dữ liệu truyền vào là int
    TestOverload t2 = new TestOverload((byte)5); // dữ liệu truyền vào là byte

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •