【发布时间】:2014-11-12 10:39:54
【问题描述】:
对 OOP 概念不是很清楚,可能是一个愚蠢的问题,请忽略它的愚蠢:-)
这个问题与下面的课程有关。在那里我添加了一个公共方法“TestMethod()”,该方法未在接口中定义(如下)。
- 这是一种不好的做法吗?是否所有方法都必须在接口中定义?
- 在哪些情况下,我可以在类中实现公共方法/成员,但不能在接口中实现?
界面...
public interface IAnimals
{
void MakeNoise(string noise);
void Move();
string Color
{
get;
set;
}
}
类实现...
class Animal : IAnimals
{
private string color;
string IAnimals.Color
{
get
{
return color;
}
set
{
color = value;
}
}
void IAnimals.MakeNoise(string noise)
{
Console.WriteLine("Animal " + noise);
}
void IAnimals.Move()
{
Console.WriteLine("Animal moves");
}
public void TestMethod()
{
Console.WriteLine("test method in Animal class");
}
}
程序...
class Program
{
static void Main(string[] args)
{
//Animal1 show methods and properties defined in the Interface
IAnimals animal1 = new Animal();
//Animal2 only shows the public method of Animal class
Animal animal2 = new Animal();
animal1.Color = "Red";
Console.WriteLine("Animal's color is " + animal1.Color);
animal1.MakeNoise("Barks");
animal1.Move();
animal2.TestMethod();
Console.ReadLine();
}
}
还有输出...
动物的颜色是红色
动物吠声
动物动作
Animal 类中的测试方法
【问题讨论】:
-
您能否定义您是否在谈论何时显式实现所有 接口方法?他们似乎在你的例子中,这使得问题更难回答(尽管帕特里克做得很好)。
-
这似乎是programmers.stackexchange.com 的一个很好的候选,因为它并不是一个真正的特定编码问题。
-
@SimonWhitehead 好吧,我知道接口的方法需要实现,但是,我的问题是何时使用接口中未定义的类中的其他方法。因为,当我创建像
IAnimals ani = new Animal()这样的对象时,我只能看到 IAnimal 的成员。为了查看Animal类本身的公共成员,所有实例必须是Animal类型,如Animal abc = new Animal()。 -
当然——但是你已经在类中显式地实现了接口方法。所以,
Animal abc = new Animal(); abc.Move();是不可能的。 “显式接口实现”是否是您问题上下文中的参与者肯定会决定我如何回答您的问题。 -
@SimonWhitehead 我会说这是
public void TestMethod(),这在这里更令人担忧。为什么我会,在这种情况下,我将访问Animal abc = new Animal(); abc.TestMethod();,而不是将其放入接口中并像IAnimals xyz = new Animal(); xyz.TestMethod();一样调用它。我不知道我能不能说得更清楚:-)。