C# 用c语言实现面向对象查询#
我对类和接口的实现有一些疑问 我有两个这样的班C# 用c语言实现面向对象查询#,c#,oop,interface,C#,Oop,Interface,我对类和接口的实现有一些疑问 我有两个这样的班 Public Class A:IFinal { private string name=string.Empty; A() { name = "Pankaj"; } public string MyName() { return name; } public strin
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";
}
}
问题:
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
{
Pankaj-IFinal中的代码格式和值使您很难理解您正在尝试执行的操作。根据提供的内容,由于您已经两次定义了相同的属性(string YourName();),因此示例无法编译 你能重做这个问题来澄清你的意图吗。。。 谢谢 [编辑]-我想我可能“理解”了您的要求-即如何定义接口。给您:
public interface IFinal
{
string YourName{ get; set; }
}
然后,按照以下步骤声明变量:
IFinal classA = new A();
IFinal classB = new B();
然后,party hard:)如果您将接口声明为
接口IFinal{
字符串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
您拥有接口的反向视图。首先必须在接口中声明方法,然后必须在实现接口的类中转移到实现。您采取了另一种方式 首先声明接口中的方法
interface IFinal {
string YourName();
}
然后
}
及
在这里,类A和B实现接口IFinal及其方法YourName()
调用相应类中的方法
IFinal clsA= new A();
IFinal clsB= new B();
如果你想让
IFinal
有两个方法,一个从类A
返回YourName
,另一个从类B
返回YourName
,那么你需要引入第三个类(我们称之为C
)然后将IFinal
上的YourName
方法更改为不同的-一个接口上不能有两个签名完全相同的方法
因此:
话虽如此,我真的不确定你问的是这个问题还是这样做有意义。您必须让我们知道您尝试做什么的更多细节。什么?我不明白你的问题。接口中的所有方法都是virtual.chuck-这不起作用,您需要get/sett'ers(oops,但当然只有在属性存在的情况下):0是的,我正在实现字符串YourName();但如何使用这个接口?假设我想通过接口访问类A方法@@jim..是的jim。。我如何使用这个接口?假设我想通过interfaceYourName()访问类A方法,在这个问题上,YourName()是一个方法,而不是一个属性。否则,我同意。@pankaj-请参见上面关于类的声明。@@Winston Smith。。谢谢。。。很好的例子
Public Class B:IFinal
{
public string YourName()
{
return "Joy";
}
}
IFinal clsA= new A();
IFinal clsB= new B();
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();
}
}