[英]OOPS query using c#
我对类和接口的实现有一些疑问
我有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和B中实现此接口,方法YourName()就像这样
公共接口IFinal {
string YourName();// Class A & Class B }
是否有可能以这种方式实施? 如果是,那么我如何在界面中声明YourName(),我该如何使用它?
您可以在实现中将方法设为虚拟,例如:
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
Pankaj - IFinal中的代码格式和值使得很难弄清楚你想要做什么。 根据提供的内容,然后样本根本无法编译,因为您已经定义了两次相同的属性(字符串YourName();)。
你可以重做这个问题来澄清你的意图吗...谢谢
[编辑] - 我想我可能'理解'你在问什么 - 即如何定义界面。 干得好:
public interface IFinal
{
string YourName{ get; set; }
}
然后,声明你的变量:
IFinal classA = new A();
IFinal classB = new B();
派对很难:)
如果您将接口声明为
interface IFinal {
string YourName();
}
这两个类都必须实现我认为你所要求的功能。
您有一个接口的反向视图。 首先,您必须在接口中声明方法,然后必须转到实现接口的类中的实现。 你采取了另一种方式。
首先在Interface中声明方法
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();
如果你想让IFinal
有两个方法,一个从A
类返回YourName
,另一个从B
类返回YourName
,那么你需要引入第三个类(让我们称之为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();
}
}
现在,说了这些,我不确定这是你要问的,或者这样做是否有意义。 您必须让我们了解您正在尝试做的更多细节。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.