我有这个代码由另一个程序员编写,我无法理解它
smallestCommons([1,2]);
根据我的理解,类型findViewById(R.id.whatisyourrealid);
的{{1}}类实现了public abstract class AppBase<T> : IApp where T : AppBase<T>, new()
{
//
}
实现的接口AppBase
???
有人可以解释最后一部分吗?
答案 0 :(得分:7)
在这种情况下,对T
的约束意味着T
必须实现AppBase<T>
并拥有默认构造函数。实际上,您需要将自己作为类型传递。
这通常是为了尝试解决类型系统并通过typeof(T)
提供对基类中的实现类型的访问。例如,给定:
public interface IApp {}
public abstract class AppBase<T> : IApp where T : AppBase<T>, new()
{
public void Print()
{
Console.WriteLine(typeof(T).ToString());
}
}
public class AppBaseFoo : AppBase<AppBaseFoo>
{
}
然后您可以编写如下代码:
var foo = new AppBaseFoo();
foo.Print();
将打印AppBaseFoo
的类型信息。但是,这不是万无一失的 - 例如,子类化“打破”这个。添加:
public class AppBaseBar : AppBaseFoo {}
然后写:
var bar = new AppBaseFoo();
bar.Print();
导致打印相同的AppBaseFoo
信息。