dotNet Bug? Reflection. 大家来猜猜输出是什么~

xiyun 2007-09-07 06:13:21
using System;
using System.Collections;
using System.Reflection;

public class MyClass
{
public static void Main()
{
PropertyInfo piPublic = typeof(SubA).GetProperty("Name", BindingFlags.Instance | BindingFlags.Public);
WL(piPublic == null);
PropertyInfo piNonPublic = typeof(SubA).GetProperty("Name", BindingFlags.Instance | BindingFlags.NonPublic);
WL(piNonPublic == null);
RL();
}

#region Helper methods

private static void WL(object text, params object[] args)
{
Console.WriteLine(text.ToString(), args);
}

private static void RL()
{
Console.ReadLine();
}

private static void Break()
{
System.Diagnostics.Debugger.Break();
}

#endregion
}

public class A
{
internal string Name
{
get{ return "A"; }
}
}

public class SubA : A
{
}

======================================
Output:
True
True
======================================

Why ?
...全文
173 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
Ubuntu 7.0.4
Monodevelop 0.12

======================================
Output:
True
False
======================================
xiyun 2007-09-13
  • 打赏
  • 举报
回复
dotNet版本是1.1, 2.0的确实没问题。估计是1.1的bug.
xiyun 2007-09-11
  • 打赏
  • 举报
回复
...你们回帖前,有做过测试么?我现在想问的是为什么internal的属性居然用反射取不到呢?????
xiyun 2007-09-10
  • 打赏
  • 举报
回复
接着up..
xiyun 2007-09-10
  • 打赏
  • 举报
回复
up~~~
xiyun 2007-09-10
  • 打赏
  • 举报
回复
你确定你测试过么?
crossrowman 2007-09-10
  • 打赏
  • 举报
回复
internal string Name

把internal改为 private protected public分别试试结果
就不难理解了

internal修饰的成员只有再同一个程序集中才能被访问
可以理解为internal修饰的成员是不被子类继承的
北京的雾霾天 2007-09-07
  • 打赏
  • 举报
回复
因为Name属性非公开的成员,所以每一个piPublic 肯定是null所以为True
而piNonPublic 则一定是非null的,所以为False
北京的雾霾天 2007-09-07
  • 打赏
  • 举报
回复
Output:
True
True
----------------------
不对啊,应该是:
Output:
True
False

17,748

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧