【发布时间】:2017-08-10 12:02:31
【问题描述】:
试图写一个通用的 Duplicate 扩展方法,我发现 MemberwiseClone() 是不可访问的。
public static T Duplicate<T>(this T original) where T : class
{
T result = (T) original.MemberwiseClone();
}
编译器拒绝方法的唯一行。 Microsoft 在 Object 类文档中显示了该方法。此外,在 NET 中,程序员定义的任何类都隐式继承自 Object。 怎么回事? 任何帮助将不胜感激。
【问题讨论】:
-
编译器没有说“rejected”,它给你一个非常具体的错误信息“Cannot access protected member 'object.MemberwiseClone()' via a qualifier of type 'object'; the qualifier must属于“X”类型(或派生自它)”。 “无法访问protected”部分是解释,受保护的方法只能访问inside类或后代类,不能从外部访问。
-
但是如果每个类都继承自Object,并且是受保护的方法,为什么不能访问它呢?注意我说 T 必须是类,所以继承是有保证的。