Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 17 kết quả

Đề tài: Lỗi trong Interfaces!

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

    Mặc định Lỗi trong Interfaces!

    Một bài toán về tài khoản như sau:
    1, Tạo giao diện IBankAccount:
    Code:
    namespace Wrox.ProCSharp.OOCSharp.BankProtocols
    {
        public interface IBankAccount
        {
            void Payin(decimal amount);
            bool Withdraw(decimal amount);
    
            decimal balance
            {
                get;
            }
        }
    }
    2, 1 lớp thừa kế:
    Code:
    namespace Wrox.ProCSharp.OOCSharp.JupiterBank
    {
        public class GoldAccount : IBankAccount
        {
            private decimal balance;
            void Payin(decimal amount)
            {
                balance += amount;
            }
            bool Withdraw(decimal amount)
            {
                if (balance >= amount)
                {
                    balance -= amount;
                    return true;
                }
                Console.WriteLine("Withdraw attempt failed");
                return false;
            }
            public decimal Balance
            {
                get
                { return balance; }
            }
            public override string ToString()
            {
                return String.Format("JupiterBankSaver={0:C}", balance);
            }
        }
    
    }
    3, Toàn CT:
    Code:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Wrox.ProCSharp.OOCSharp.BankProtocols;
    using Wrox.ProCSharp.OOCSharp.VenusBank;
    using Wrox.ProCSharp.OOCSharp.JupiterBank;
    
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                
                IBankAccount JupiterAccount = new GoldAccount();
                JupiterAccount.Payin(500);
                JupiterAccount.Withdraw(600);
                JupiterAccount.Withdraw(200);
                Console.WriteLine(JupiterAccount.ToString());
                Console.ReadLine();
            }
        }
    }
    Khi chạy nó thông báo lỗi là: Kiểu hoặc tên namespace 'IBankAccount' không được tìm thấy trong lớp thừa kế GoldAccount. Trong khi đó mình vẫn sử dụng tính kế thừa
    Code:
    public class GoldAccount : IBankAccount
    .Thế nghĩa là sao nhỉ.

  2. #2
    Ngày gia nhập
    01 2008
    Bài viết
    148

    Không biết mình có nghĩ đúng không nữa,nhưng mình đưa ra ý kiến cửa mình :

    uhm, minh nghĩ phần khai báo không gian tên, bạn thiếu khai báo
    Code:
    using Wrox.ProCSharp.OOCSharp.BankProtocols;
    còn trong phần Main, bạn khai báo :
    Code:
    using Wrox.ProCSharp.OOCSharp.VenusBank;
    mà trong project bạn đưa lên đây không có không gian đó
    Đã được chỉnh sửa lần cuối bởi thanhhuy191188 : 05-05-2008 lúc 07:14 AM.

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

    Code:
    using Wrox.ProCSharp.OOCSharp.BankProtocols;
    Tớ nghĩ cái này không phải khai báo trong không gian tên của lớp GoldAccount vì lớp này nó là thừa kế của IBankAccount nên chỉ cần
    Code:
    public class GoldAccount : IBankAccount
    chắc là được.
    Trong bài tớ còn có cả lớp SaverAccount cũng là kế thừa từ IBankAccount với không gian tên
    Code:
    namespace Wrox.ProCSharp.OOCSharp.VenusBank
    {
    . 2 lớp kế thừa này tớ làm giống hệt nhau mà nó lại báo lỗi ở lớp GoldAccount. Thế là vậy các bạn???

  4. #4
    Ngày gia nhập
    11 2007
    Bài viết
    294

    Không khai báo namespace thì nó nhận ra làm sao được ?
    Bạn cứ thử khai báo thêm cái namespace Wrox.ProCSharp.OOCSharp.BankProtocols xem sao ^^!
    Nó có thừa kế nhưng không khai báo thì nó ko nhận ra đc cái interface đó ở đâu.
    Is the moon rising...

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

    Code:
    namespace Wrox.ProCSharp.OOCSharp.BankProtocols
    {
        namespace Wrox.ProCSharp.OOCSharp.JupiterBank
        {
            public class GoldAccount : IBankAccount
            {
                private decimal balance;
                void Payin(decimal amount)
                {
                    balance += amount;
                }
                bool Withdraw(decimal amount)
                {
                    if (balance >= amount)
                    {
                        balance -= amount;
                        return true;
                    }
                    Console.WriteLine("Withdraw attempt failed");
                    return false;
                }
                public decimal Balance
                {
                    get
                    { return balance; }
                }
                public override string ToString()
                {
                    return String.Format("JupiterBankSaver={0:C}", balance);
                }
            }
    
        }
    }
    Tớ làm như vậy không biết đúng chưa. Các bạn thử giúp tớ với, vì chương trình của tớ đang bị lỗi chưa cài được.

  6. #6
    Ngày gia nhập
    11 2007
    Bài viết
    294

    Mặc định Lỗi trong Interfaces!

    Thế này thì chạy thế nào được ^^!
    2 cái namespace lồng nhau thế kia.
    Bạn xóa dòng này đi
    Visual C# Code:
    1. namespace Wrox.ProCSharp.OOCSharp.BankProtocols
    Is the moon rising...

  7. #7
    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 darkan Xem bài viết
    darkan
    Bạn cứ thử khai báo thêm cái namespace Wrox.ProCSharp.OOCSharp.BankProtocols xem sao ^^!
    Nó có thừa kế nhưng không khai báo thì nó ko nhận ra đc cái interface đó ở đâu.

    darkan
    Thế này thì chạy thế nào được ^^!
    2 cái namespace lồng nhau thế kia.
    Bạn xóa dòng này đi
    CSharp Code: | Lựa chọn code | Ẩn/Hiện code |
    namespace Wrox.ProCSharp.OOCSharp.BankProtocols
    NghiDung

    Code:

    using Wrox.ProCSharp.OOCSharp.BankProtocols;

    Tớ nghĩ cái này không phải khai báo trong không gian tên của lớp GoldAccount
    Các namespace có thể lồng nhau cơ mà, nhưng không biết có sử dụng trong việc kế thừa?

  8. #8
    Ngày gia nhập
    11 2007
    Bài viết
    294

    Bạn vẫn chưa hiểu tại sao khai báo lồng nhau nó lại sai ah ^^!

    Bạn khai báo thế kia thì cái namespace chính xác của GoldAccount sẽ là
    Visual C# Code:
    1. Wrox.ProCSharp.OOCSharp.BankProtocols.Wrox.ProCSharp.OOCSharp.JupiterBank

    Trong đoạn void main bạn using thế này
    Visual C# Code:
    1. using Wrox.ProCSharp.OOCSharp.BankProtocols;
    2. using Wrox.ProCSharp.OOCSharp.VenusBank;
    3. using Wrox.ProCSharp.OOCSharp.JupiterBank;

    Thế thì nó nhận ra làm sao được ^^!
    Is the moon rising...

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

    Tớ đã làm như bạn nói nhưng vẫn không được. Bạn có thể post code cụ thể lên để tớ hiểu rõ hơn? Thanks!

  10. #10
    Ngày gia nhập
    11 2007
    Bài viết
    294

    Visual C# Code:
    1. using Wrox.ProCSharp.OOCSharp.BankProtocols;
    2.  
    3. namespace Wrox.ProCSharp.OOCSharp.JupiterBank
    4.     {
    5.         public class GoldAccount : IBankAccount
    6.         {
    7.             private decimal balance;
    8.             void Payin(decimal amount)
    9.             {
    10.                 balance += amount;
    11.             }
    12.             bool Withdraw(decimal amount)
    13.             {
    14.                 if (balance >= amount)
    15.                 {
    16.                     balance -= amount;
    17.                     return true;
    18.                 }
    19.                 Console.WriteLine("Withdraw attempt failed");
    20.                 return false;
    21.             }
    22.             public decimal Balance
    23.             {
    24.                 get
    25.                 { return balance; }
    26.             }
    27.             public override string ToString()
    28.             {
    29.                 return String.Format("JupiterBankSaver={0:C}", balance);
    30.             }
    31.         }

    That's it!
    Is the moon rising...

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