- Tìm số 0 đầu tiên trong một mảng bit
- Unix Hiển thị thông tin về các tập tin khớp với một trong hai mẫu
- Biểu thức chính quy thay thế nhiều tệp
- Ẩn lệnh từ xtrace
interface ITurtle
{
void Fight();
void EatPizza();
}
interface ILeonardo : ITurtle
{
void UseKatana();
}
interface IRaphael : ITurtle
{
void UseSai();
}
interface IDonatello : ITurtle
{
void UseBo();
}
interface IMichelangelo : ITurtle
{
void UseNunchuku();
}
如果我想创造一只可以做到所有 4 项的大乌龟怎么办?我想编码:
class GrandTurtle : IMichelangelo, IDonatello, IRaphael, ILeonardo
{
// Implementation not shown for brevity.
}
这可能吗,因为现在,我似乎必须分别执行 Fight()
Và EatPizza()
4 次。但我认为这两个通用功能将解决并且只需要实现一次,对吧?
我可以在不继承 ITurtle
的情况下创建 4 个中间接口(interface),然后让 GrandTurtle
hoàn thành ITurtle
。这解决了接口(interface)继承问题,但现在它在语义上看起来是错误的,因为它使 ITurtle
看起来像第五兄弟,但事实并非如此。另外,我希望能够创建特定于乌龟的类,例如 class BostonLeonardo : ILeonardo
.
我从很多地方读到这似乎是一场无休止的辩论 - 有人说“接口(interface)内的继承”非常好,而有人说它不是 - 要么我不理解他们的解释,要么他们只是说这很糟糕练习而不解释原因。
1 Câu trả lời
您只能实现方法 Fight
Và EatPizza
一次,因为只有一个接口(interface)定义了它们。如果您在每个 ILeonardo
等接口(interface)上都有 Fight
Và EatPizza
,您可以选择实现一次或使用显式接口(interface)根据接口(interface)签名更改这些方法的行为的实现。我会举个例子,因为我喜欢 TMNT:
interface ILeonardo
{
void Fight();
void EatPizza();
void UseKatana();
}
interface IRaphael
{
void Fight();
void EatPizza();
void UseSai();
}
interface IDonatello
{
void Fight();
void EatPizza();
void UseBo();
}
interface IMichelangelo
{
void Fight();
void EatPizza();
void UseNunchuku();
}
class GrandTurtle : IMichelangelo, IDonatello, IRaphael, ILeonardo
{
// Code that fires when Fight is called on ILeonardo turtle = new GrandTurtle()
void ILeonardo.Fight()
{
UseKatana();
}
// Code that fires when Fight is called on IRaphael turtle = new GrandTurtle()
void IRaphael.Fight()
{
UseSai();
}
// Code that fires for all other turtles
public void Fight()
{
UseThatCrappyStickThingTheOldActionFiguresCameWith();
}
// Implement EatPizza() and such here...
}
只有当 GrandTurtle 的类型签名是适当的接口(interface)时,这些显式接口(interface)实现才会生效。
关于c# - 实现 "Inherit"(实现)通用接口(interface)的接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21324264/
Viết một giao diện chỉ dùng để tập trung hóa các giao diện khác là một thực hành tốt hay xấu? giao diện Giao diệnA: Giao diệnB, Giao diệnC { }
Có cách nào để xác định loại cụ thể từ danh sách các giao diện tùy ý không? Tôi biết về chuyển đổi kiểu nhưng tôi muốn biết tất cả các giao diện được đáp ứng. Ví dụ, cho: loại Mover giao diện { Mo
Tôi đang cố gắng tạo một đống Fibonacci. (Chúng được đề cập nhiều lần trong lớp thuật toán mà tôi đang học và tôi muốn kiểm tra nó.) Tôi muốn heap hoạt động với bất kỳ loại nút nào, vì vậy tôi định nghĩa một giao diện Nút: gói loại nút
Đây là mã của tôi: kiểu IA giao diện { FB() IB } kiểu IB giao diện { Bar() chuỗi } kiểu A struct {
Ví dụ A: // mã giả giao diện IFoo { void bar(); } lớp FooPlatformA : IFoo { void bar() {
Việc hợp nhất phản hồi leppies sẽ biên dịch - nhưng theo tôi có một số nhược điểm, tôi muốn trình biên dịch buộc mỗi lớp con phải xác định thuộc tính Uri của riêng chúng. Mã hiện tại: [] type UriUserControl() = inh
Tôi đang xây dựng một dự án lấy một thuật ngữ từ người dùng, sau đó thực hiện tìm kiếm trên Google và trả về danh sách các tiêu đề ở định dạng json. Tôi đang sử dụng API serpwow để thực hiện tìm kiếm trên Google và cố gắng phân tích phản hồi. Nhưng lỗi tôi nhận được là:
Tôi chỉ muốn triển khai một số giao diện nhất định bên trong các giao diện khác, tôi không muốn chúng có thể được kế thừa trực tiếp bởi một lớp. Cảm ơn trước! Câu trả lời hay nhất Bạn không thể làm điều này trong C# - bất kỳ lớp nào cũng có thể triển khai bất kỳ giao diện nào mà nó có quyền truy cập
Tôi mới làm quen với Go và có một số thủ thuật mà tôi vẫn chưa thành thạo. Ví dụ, tôi có một hàm mà tôi có thể gọi như thế này: myVar.InitOperation("foo",Operator.EQUAL,"bar") myVar.Init
Tôi có một giao diện chung mô tả quyền truy cập vào luồng đầu ra, như thế này: interface IOutput { function writeInteger(aValue:Int):Void;
Tôi đang thực hiện một dự án muốn gắn mạch cảm biến quang vào máy tính thông qua một loại giao diện nào đó (tốt nhất là USB). Tuy nhiên, vì tôi là người mới nên tôi không biết nên giải quyết vấn đề này theo hướng nào. Giả sử tôi có một USB được kết nối
Bối cảnh Tôi đang cố gắng tạo một ứng dụng đơn giản để thực sự hiểu toàn bộ ngăn xếp DDD+TDD+v.v. Mục tiêu của tôi là đưa lớp kho lưu trữ DAL vào thời gian chạy một cách động. Điều này giúp các lớp dịch vụ ứng dụng và miền của tôi có thể kiểm tra được. Tôi dự định sử dụng "DI của người nghèo" để hoàn thành hiện tại
Trong Java, việc một giao diện mở rộng một giao diện khác là hoàn toàn hợp pháp. Mối quan hệ này trong UML trông giống như mối quan hệ "mở rộng" (mũi tên liền, đóng, không tô màu) hay mối quan hệ "thực hiện" (mũi tên đứt nét, đóng, không tô màu)?
Tôi muốn tạo một giao diện với các triển khai mặc định của hàm so sánh và hàm bằng nhau. Nếu tôi xóa mọi thứ khỏi kiểu IKeyable ngoại trừ thành viên Key, thì đó là một giao diện hợp lệ miễn là tôi không thêm triển khai mặc định. từ
Giao diện kép trong COM là giao diện có thể truy cập thông qua phương thức DispInterface hoặc VTable. Bây giờ ai đó có thể cho tôi biết chính xác sự khác biệt giữa hai phương pháp này là gì không? Tôi nghĩ là V
Tôi có một phương thức lớp trả về danh sách nhân viên có thể được lặp lại. Cách tốt nhất để trả về danh sách là gì? Thông thường tôi chỉ trả về một ArrayList. Tuy nhiên, theo tôi hiểu thì giao diện này phù hợp hơn với loại hoạt động này. Giao diện nào là tốt nhất để sử dụng? Ngoài ra, tại sao lại trả về giao diện (trong
Tôi muốn khởi tạo một giao diện không tĩnh bên trong từ bên ngoài lớp bao bọc. Liệu điều này có thể thực hiện được không? Hãy xem xét đoạn mã sau: shared class AOuterClass() { Integer val = 3; shared
Tôi đã viết một giao diện cho một lớp như thế này: public interface IGenericMultipleRepository { Lazy> addresses { ge
Tôi là người mới bắt đầu học UML và hiện tôi đang tạo sơ đồ trình tự và vấn đề là tôi muốn triển khai giao diện DAO dựa trên dữ liệu đầu vào của người dùng. Cách vẽ sơ đồ trình tự chính xác để triển khai giao diện. Câu trả lời hay nhất: Bạn sẽ không ở chế độ SD
Để tạo một nhóm được xác thực có điều kiện bằng cách sử dụng xác thực jsr 303, hãy chuyển lớp giao diện cho chú thích như sau: @NotEmpty (groups={UpdateValue.class}) Tôi có nhiều giao diện khác nhau
Tôi là một lập trình viên xuất sắc, rất giỏi!