我正在尝试实现一个需要单个属性的接口,但我没有明确关心它是什么类型。例如:
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>
而不是转换在一个单一的功能中。
如何要求某个类包含属性?
答案 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。