public abstract class DayInfo
{
protected virtual void GetInfoCore() {
throw new System.NotImplementedException();
}
// or
// protected abstract void GetInfoCore();
public void GetInfo() {
GetInfoCore();
}
}
public class DayInfo<T> : DayInfo
{
private T info;
public DayInfo(T data) {
info = data;
}
public new T GetInfo() { // << This
return info;
}
protected override void GetInfoCore() {
GetInfo();
}
}
static class Program
{
static void Main() {
var item = new DayInfo<string>("aaa");
var info = item.GetInfo();
System.Console.WriteLine(info);
}
}
cHVibGljIGFic3RyYWN0IGNsYXNzIERheUluZm8KewogIHByb3RlY3RlZCB2aXJ0dWFsIHZvaWQgR2V0SW5mb0NvcmUoKSB7CiAgICB0aHJvdyBuZXcgU3lzdGVtLk5vdEltcGxlbWVudGVkRXhjZXB0aW9uKCk7CiAgfQoKICAvLyBvcgogIC8vIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIEdldEluZm9Db3JlKCk7CgogIHB1YmxpYyB2b2lkIEdldEluZm8oKSB7CiAgICBHZXRJbmZvQ29yZSgpOwogIH0KfQoKcHVibGljIGNsYXNzIERheUluZm88VD4gOiBEYXlJbmZvCnsKICBwcml2YXRlIFQgaW5mbzsKCiAgcHVibGljIERheUluZm8oVCBkYXRhKSB7CiAgICBpbmZvID0gZGF0YTsKICB9CgogIHB1YmxpYyBuZXcgVCBHZXRJbmZvKCkgeyAvLyA8PCBUaGlzCiAgICByZXR1cm4gaW5mbzsKICB9CgogIHByb3RlY3RlZCBvdmVycmlkZSB2b2lkIEdldEluZm9Db3JlKCkgewogICAgR2V0SW5mbygpOwogIH0KfQoKc3RhdGljIGNsYXNzIFByb2dyYW0KewogIHN0YXRpYyB2b2lkIE1haW4oKSB7CiAgICB2YXIgaXRlbSA9IG5ldyBEYXlJbmZvPHN0cmluZz4oImFhYSIpOwogICAgdmFyIGluZm8gPSBpdGVtLkdldEluZm8oKTsKICAgIFN5c3RlbS5Db25zb2xlLldyaXRlTGluZShpbmZvKTsKICB9Cn0=