我对类和接口的实现有一些疑问
我有2个这样的课程
Public Class A:IFinal
{
private string name=string.Empty;
A()
{
name = "Pankaj";
}
public string MyName()
{
return name;
}
public string YourName()
{
return "Amit";
}
}
Public Class B:IFinal
{
private string name=string.Empty;
B()
{
name = "Amit";
}
public string GetNane()
{
return name;
}
public string YourName()
{
return "Joy";
}
}
问题:
现在我有一个IFinal接口,我想在A& A类中实现这个接口B方法YourName()就像这样
公共界面IFinal {
string YourName();// Class A & Class B
}
有可能以这种方式实施吗?如果是,那么我如何在界面中声明YourName()以及如何使用它?
答案 0 :(得分:5)
您可以在实现中将方法设为虚拟,例如:
interface IFinal
{
string YourName();
}
class A: IFinal
{
public virtual string YourName() { return "Amit"; }
}
class B: IFinal
{
public virtual string YourName() { return "Joy"; }
}
或者你可以使用A和B派生的公共基础实现,例如
interface IFinal
{
string YourName();
}
abstract class FinalBase : IFinal
{
public virtual string YourName() { return string.Empty; }
}
class A : FinalBase
{
public override string YourName()
{
return "A";
}
}
class B : FinalBase
{
public override string YourName()
{
return "B";
}
}
class C : A
{
public override string YourName()
{
return "C";
}
}
new A().YourName(); // A
new B().YourName(); // B
IFinal b = new B();
b.YourName(); // B
FinalBase b = new C();
b.YourName(); // C
答案 1 :(得分:3)
Pankaj - IFinal中的代码格式和值使得很难弄清楚你想要做什么。根据提供的内容,然后样本根本无法编译,因为你已经定义了两次相同的属性(字符串YourName();)。
你可以重做这个问题来澄清你的意图吗? 感谢
[edit] - 我想我可能会“理解”你在问什么 - 即如何定义界面。你走了:
public interface IFinal
{
string YourName{ get; set; }
}
然后,按照以下方式声明您的变量:
IFinal classA = new A();
IFinal classB = new B();
然后,坚持党:)
答案 2 :(得分:1)
如果您将界面声明为
interface IFinal {
string YourName();
}
这两个课程都必须实现我认为你所要求的那个功能。
答案 3 :(得分:0)
您具有接口的反向视图。首先,您必须在接口中声明方法,然后必须转到实现接口的类中的实现。你采取了另一种方式。
首先声明接口
中的方法interface IFinal {
string YourName();
}
然后
Public Class A:IFinal
{
public string YourName()
{
return "Amit";
}
}
和
Public Class B:IFinal
{
public string YourName()
{
return "Joy";
}
}
这里A类和B类实现了IFinal接口及其方法YourName()。
调用相应类中的方法
IFinal clsA= new A();
IFinal clsB= new B();
答案 4 :(得分:0)
如果您尝试让IFinal
有两个方法,一个从类YourName
返回A
,另一个从类YourName
返回B
然后你需要引入第三个类(让我们称之为C
),然后将YourName
上的IFinal
方法更改为不同的 - 你不能有两个完全相同的方法接口上的相同签名。
所以:
public interface IFinal
{
string YourNameA();
string YourNameB();
}
public class C : IFinal
{
public A A {get; set;}
public B B {get; set;}
public string YourNameA()
{
return this.A.YourName();
}
public string YourNameB()
{
return this.B.YourName();
}
}
现在,话虽如此,我不确定这是你要问的,或者这样做是否有意义。您需要让我们了解您正在尝试做的更多细节。