好吧,由于我最初的问题似乎有点模棱两可,因为我在询问有关C#语言的一般问题,但是在显示特定示例的过程中我遇到了问题,因此我将尝试重写因此,很清楚我的问题是关于C#语言的,而不是我的特定问题。
我目前有一个类的属性(实际上是几个),根据您是通过代码直接访问还是使用反射访问它们,它们返回不同的值。当我使用VS的直接控制台访问属性时,会发生这种情况:
> SelectedLine.QtyOutstanding
0
> var prop = SelectedLine.GetType().GetProperty("QtyOutstanding")
> prop.GetValue(SelectedLine)
8
无论如何定义属性,两种访问属性的方式在C#中有什么区别? 如果有一个,它们是否应该在setter / getter中运行完全相同的代码?
(考虑到GetType()返回与声明变量相同的类型)
答案 0 :(得分:1)
我找到了一种产生这种方式的方法,也许您的案子是这样的?
如果通过接口可以访问SelectedLine,并且您的类具有该类的显式实现,但还具有相同名称的public属性,则可能导致不同的结果。 例子
class Program
{
static void Main(string[] args)
{
var SelectedLine = (ILine)new Line(8);
Console.WriteLine(SelectedLine.QtyOutstanding); // 0
var prop = SelectedLine.GetType().GetProperty("QtyOutstanding");
Console.WriteLine(prop.GetValue(SelectedLine)); // 8
Console.ReadLine();
}
}
class Line : ILine
{
public Line(int qtyOutstanding)
{
QtyOutstanding = qtyOutstanding;
}
public int QtyOutstanding { get; }
int ILine.QtyOutstanding
{
get
{
return 0;
}
}
}
interface ILine
{
int QtyOutstanding { get; }
}