如何在派生类或部分类中实现接口?

时间:2012-01-18 13:19:25

标签: c# oop interface

我有一个由工具生成的部分类。

Foo.cs

public partial class Foo {
    [SomeAttribute()]
    public string Bar {get;set;}
}

我需要为Foo实现以下界面,而不需要触及Foo.cs:

IFoo.cs

public interface IFoo {
    string Bar {get;set;}
}

扩展Foo也是一种选择,但重新实现Bar属性不是。

可以这样做吗?

3 个答案:

答案 0 :(得分:8)

是什么阻止您在另一个文件中再次执行此操作?

public partial class Foo : IFoo
{
}

由于Bar属性已经存在,因此不需要重新实现它。

或在新班级

public class FooExtended : Foo, IFoo
{
}

同样,您不需要实现Bar,因为Foo已经实现了它。

答案 1 :(得分:1)

你可以为Foo创建一个实现IFoo的部分类,但是Bar属性不公开,它将不起作用。

如果Bar属性是公开的:

partial class Foo
{
    public string Bar { get; set; }
}

interface IFoo
{
    string Bar { get; set; }
}

partial class Foo : IFoo
{

}

答案 2 :(得分:1)

由于Bar是私有的,所以这就是您要找的内容:

public partial class Foo : IFoo
{
    string IFoo.Bar
    {
        get
        {
            return this.Bar;  // Returns the private value of your existing Bar private field
        }
        set
        {
            this.Bar = value;
        }
    }
}

无论如何,这是令人困惑的,如果可能应该避免。

编辑:好的,您已经更改了自己的问题,因此Bar现已公开,因为Bar始终在{{1}中实施,因此不再有问题}}