我有一个接口IProduct和两个部分类SearchedProductInternal和SearchedProductExternal。 这两个类是来自第三方Web服务搜索的扩展类,但两者都返回略有不同的结果类型。 我想使用两者的接口,所以返回的类型是相同的。我知道如何继承,但我该怎么做才能返回"姓名"因为接口和SearchedProductInternal都有相同的对象名?
我的界面类似如下:
public interface IProduct
{
string Name { get; }
string ID { get; }
string DescriptionShort { get; }
string DescriptionLong { get; }
}
My Object SearchedProductInternal具有以下属性:
string Name;
int ObjectIdField;
string DescriptionShortField;
string DescriptionLongField;
所以我的这就是我继承的地方
public partial class SearchedProductInternal : IProduct
{
public string ID
{
get { return ObjectIdField.ToString(); }
}
public string Name
{
//What do I do here?
}
public string DescriptionShort{get { return shortDescriptionField; }
}
public string DescriptionLong {get { return longDescriptionField; }
}
}
我想返回在SearchedProductInternal课程中分配原创性的名称,但我不知道该怎么做,因为如果我只是把
return Name
我得到一个stackoverflow错误,因为它似乎只是一直在调用它自己?
答案 0 :(得分:3)
我认为你应该在这里明确地实现接口,这样你就可以拥有类中定义的Name属性和接口的IProduct.Name属性。
答案 1 :(得分:1)
如果您的SearchedProductInternal
已经定义了属性Name
并且您尝试返回相同Name
属性的值,那么您就不必做任何事情。
不要再创建一个名为Name
的属性。只需删除您添加的Name
属性即可。一切都应该有效,因为该类已经实现了接口IProduct
定义的契约。
如果您想从IProduct.Name
属性返回不同的值,可以使用explicit interface implementation。
答案 2 :(得分:0)
在这种情况下,您必须更改变量的名称。
如果这是一个暧昧的句子,那么记住它对于PC来说是一样的。名字不能是两件事。但是Name和_Name可以。
public class SearchedProductInternal : IProduct
{
string _name = "test";
public string Name
{
get
{
return _name;
}
}
}
public interface IProduct
{
string Name { get; }
}
答案 3 :(得分:0)
我同意上述答案。但这里是一个小问题,我们不能将接口成员公开为public,因为它会导致编译错误。
我们可以同时拥有类级别和接口级别成员。使用类实例无法访问接口成员,只能通过接口实例访问它。
public interface IProduct
{
string Name { get; }
string ID { get; }
string DescriptionShort { get; }
string DescriptionLong { get; }
}
public partial class SearchedProductInternal : IProduct
{
private string _clsName;
private string _interfaceName;
private string _objectID;
private string _shortDesc;
private string _longDesc;
public SearchedProductInternal(string _cName, string _iName)
{
_clsName = _cName;
_interfaceName = _iName;
}
public string Name
{
get { return _clsName; }
}
string IProduct.Name
{
get { return _interfaceName; }
}
string IProduct.ID
{
get { return _objectID; }
}
string IProduct.DescriptionShort
{
get { return _shortDesc; }
}
string IProduct.DescriptionLong
{
get { return _longDesc; }
}
}
class Program
{
static void Main(string[] args)
{
SearchedProductInternal clsSearchProduct = new SearchedProductInternal("clsName", "interfaceName");
Console.WriteLine(clsSearchProduct.Name);
IProduct interfaceProduct = (IProduct)clsSearchProduct;
Console.WriteLine(interfaceProduct.Name);
Console.ReadLine();
}
}
答案 4 :(得分:0)
我不确定我是否只是以一种不被理解的方式解释了这一点,但我实现这一点的方式只是使用{get; set;}
public partial class SearchedProductInternal : IProduct
{
public string ID
{
get { return ObjectIdField.ToString(); }
}
public string Name {get;set;}
public string DescriptionShort{get { return shortDescriptionField; }
}
public string DescriptionLong {get { return longDescriptionField; }
}
}