C#:使用任何类型的属性实现接口

时间:2011-01-16 07:08:30

标签: c# interface

我正在尝试实现一个需要单个属性的接口,但我没有明确关心它是什么类型。例如:

public interface IName
{
    dynamic Name {get; set;}
}

然后,如果我有一个类,我想用一种字符串实现IName接口:

public class Person : IName
{
     public string Name {get; set;}
} 

然而这会引发错误。我知道我可以使接口IName采用通用的争论IName<T>,但这迫使我创建了一堆重载函数,这些函数采用IName<string>IName<NameObj>IName<etc>而不是转换在一个单一的功能中。

如何要求某个类包含属性?

4 个答案:

答案 0 :(得分:11)

interface IName<T>
{
    T Name { get; set; }
}

class Person : IName<string>
{
    public string Name { get; set; }
}

答案 1 :(得分:5)

我现在无法测试,但也许您可以明确地实现接口。

public class Person : IName
{
    public string Name {get; set;}

    dynamic IName.Name {
        get { return this.Name; }
        set { this.Name = value as string; }
    }
} 

答案 2 :(得分:1)

返回动态可让您返回任何类型的动画。只需将实现类中的类型声明为动态类型。

    public interface IName
    {
        dynamic name { get; set; }
    }

    public class Person: IName
    {
        private string _name;
        public dynamic name { get { return _name; } set { _name = value;} }
    }

编辑:

请注意,您必须注意传递给name的内容,因为只会在运行时检查值的类型(使用动态类型的乐趣)。

Person p = new Person();
p.name = "me"; // compiles and runs fine, "me" is a string
p.name = p; // compiles fine, but will run into problems at runtime because p is not a string

答案 3 :(得分:0)

制作

public string Name {get; set;}

并返回类型Object。