说我有一个实现属性具有字符串类型的类型:

public class Record
{
     public string Value { get; set; }
}

然后我具有限定具有相同名称的属性的接口:

public interface IIntValued
{
     public int Value { get; set; }
}

我可以使用显式的接口,如下所示:

public class Record : IIntValued
{
     public string Value { get; set; }
     int IIntValued.Value 
     {
          get{ return 0; } set{}
     }
}

不过,如果我希望能够引用字符串“值”在我的显式接口,能做些什么呢?如果是这样,怎么样?我想象它是这样的:

public class Record : IIntValued
{
     public string Value { get; set; }
     public int IIntValued.Value 
     {
          get
          {
               string value = /*Magic here*/.Value;
               return int.parse(value); 
          } 
          set{}
     }
}

可以看到,我想“值”属性在一个表达式“INT值”,“值”属性的“值字符串”。如果它是另一个显式实现接口成员,我可以强制转换到该接口,然后使用,但它是如何将一个隐式类型成员的工作?

注意:这个例子是有点做作,但希望表明了语言问题

有帮助吗?

解决方案

有关的隐含型部件,只是Valuethis.Value要细。 - 因为它不会解决在默认情况下IIntValued.Value

其他提示

当然可以!问题是,你将可访问关键字,他们是非法的。明确实施的成员不能有无障碍关键字。隐式实现将与出IIntValue写入。前缀成员名称。

下面是一个可行的样品。

public interface IIntValued
{
  int Value { get; set; }
}

public class Record : IIntValued
{
  public string Value { get; set; }
  int IIntValued.Value
  {
    get
    {
      string value = this.Value;
      return int.Parse(value);
    }
    set { }
  }
}

是的,你可以访问这两个属性。这取决于用于访问属性变量的类型。观察:

Record myInstanceAsRecord = myInstance;
IIntValued myInstanceAsIIntValued = myinstance;

string valueAsString = myInstanceAsRecord.Value;
int valueAsInt = myInstanceAsIIntValued.Value;

唉,写总结后,我意识到,我知道答案。 :P 如果我带this和它类型强制转换为类型,则显式执行将不包括在内:

string value = ((Record)this).Value; //is the implicit string.

编辑:一些进一步的输入之后,将它指出,没有必要做手工的东西,编译器会自动做(感谢反应!)。因此:

string value = this.Value;

会工作。这是当然的,因为this不是接口变量,所以隐含的属性将是默认选择的一个。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top