C# 重写父常量变量
我试图重写一个类常量变量,但我的方法不起作用 有关以下代码:C# 重写父常量变量,c#,inheritance,static,C#,Inheritance,Static,我试图重写一个类常量变量,但我的方法不起作用 有关以下代码: // The following line of code should output "DATE: 9/9/2014" // But it outputs: "DATE: 31/3/2015" CustomDateChecker.checkUsedByDate(); 在下面的班级;我如何覆盖变量按年份使用,按月份使用和按日期使用 public class DateChecker { public const uint
// The following line of code should output "DATE: 9/9/2014"
// But it outputs: "DATE: 31/3/2015"
CustomDateChecker.checkUsedByDate();
在下面的班级;我如何覆盖变量按年份使用
,按月份使用
和按日期使用
public class DateChecker
{
public const uint USED_BY_YEAR = 2015;
public const uint USED_BY_MONTH = 3;
public const uint USED_BY_DAY = 31;
public static bool checkUsedByDate()
{
TaskDialog.MessageBox.Show(string.Format("DATE: {0}/{1}/{2}", USED_BY_DAY, USED_BY_MONTH, USED_BY_YEAR));
}
}
public class CustomDateChecker : DateChecker
{
// Override Date
public const uint USED_BY_YEAR = 2014;
public const uint USED_BY_MONTH = 9;
public const uint USED_BY_DAY = 9;
}
编辑:阅读建议后,我将变量更改为静态只读
,而不是常量
。但不幸的是,这是同一个问题,日期没有改变。使用静态只读
是一种可能的解决方案吗
public class DateChecker
{
public static readonly uint USED_BY_YEAR = 2015;
public static readonly uint USED_BY_MONTH = 3;
public static readonly uint USED_BY_DAY = 31;
public static bool checkUsedByDate()
{
TaskDialog.MessageBox.Show(string.Format("DATE: {0}/{1}/{2}", USED_BY_DAY, USED_BY_MONTH, USED_BY_YEAR));
}
}
public class CustomDateChecker : DateChecker
{
// Override Date
public static new readonly uint USED_BY_YEAR = 2014;
public static new readonly uint USED_BY_MONTH = 9;
public static new readonly uint USED_BY_DAY = 9;
}
public class DateChecker
{
public virtual uint USED_BY_YEAR { get; set; }
public virtual uint USED_BY_MONTH { get; set; }
public virtual uint USED_BY_DAY { get; set; }
public DateChecker()
{
USED_BY_YEAR = 2015;
USED_BY_MONTH = 3;
USED_BY_DAY = 31;
}
public virtual void checkUsedByDate()
{
Console.Write(string.Format("DATE: {0}/{1}/{2}", USED_BY_DAY, USED_BY_MONTH, USED_BY_YEAR));
}
}
public class CustomDateChecker : DateChecker
{
public override uint USED_BY_DAY
{
get
{
return 9;
}
set
{
base.USED_BY_DAY = value;
}
}
public override uint USED_BY_MONTH
{
get
{
return 9;
}
set
{
base.USED_BY_MONTH = value;
}
}
public override uint USED_BY_YEAR
{
get
{
return 2014;
}
set
{
base.USED_BY_YEAR = value;
}
}
}
class Program
{
static void Main(string[] args)
{
new CustomDateChecker().checkUsedByDate();
}
}
你不能覆盖它们。它们是
const
。如果它们是静态的,您也无法覆盖它们。只有虚拟实例成员可以被覆盖。@MarcinJuraszek不能使用new
关键字覆盖静态成员吗?可以使用new
关键字隐藏它们,这与覆盖它们不同<基类中的code>checkUsedByDate()方法仍将使用该类中的值。
public class DateChecker
{
public virtual uint USED_BY_YEAR { get; set; }
public virtual uint USED_BY_MONTH { get; set; }
public virtual uint USED_BY_DAY { get; set; }
public DateChecker()
{
USED_BY_YEAR = 2015;
USED_BY_MONTH = 3;
USED_BY_DAY = 31;
}
public virtual void checkUsedByDate()
{
Console.Write(string.Format("DATE: {0}/{1}/{2}", USED_BY_DAY, USED_BY_MONTH, USED_BY_YEAR));
}
}
public class CustomDateChecker : DateChecker
{
public override uint USED_BY_DAY
{
get
{
return 9;
}
set
{
base.USED_BY_DAY = value;
}
}
public override uint USED_BY_MONTH
{
get
{
return 9;
}
set
{
base.USED_BY_MONTH = value;
}
}
public override uint USED_BY_YEAR
{
get
{
return 2014;
}
set
{
base.USED_BY_YEAR = value;
}
}
}
class Program
{
static void Main(string[] args)
{
new CustomDateChecker().checkUsedByDate();
}
}