在子 class 中完成嵌套部分 class
Complete nested partial class in child class
我有两个 class,A 和 B。B 继承自 A。
这是我的问题:我有一个常量 ConstantA,它对 class A 很有用,但对子 classes 也很有用。我还有一个常量 ConstantB,它是我的 class B 特有的。
由于我将我的常量存储在 public 静态嵌套 class 中,子 class 中的常量 class 隐藏了父常量。我尝试将其设为部分 class,但没有帮助。有什么办法可以解决这个问题吗?
这是一个例子:
public class A
{
public static partial class Constants
{
public const int ConstantA = 1;
}
}
public class B : A
{
public static partial class Constants
{
public const int ConstantB = 1;
}
}
谢谢!
只需让您的 ConstantA 成为您父级 class 的属性,将此属性放入嵌套 class 中即可将其从继承 class 的范围中删除。
如果你真的想要嵌套classes,你可以留下static
关键字,并为B.Constants
嵌套class做继承:
public class A
{
public class Constants
{
public const int ConstantA = 1;
}
}
public class B : A
{
public new class Constants : A.Constants
{
public const int ConstantB = 2;
}
}
用法相同
您还需要将 A
设为部分 class,并与 B
class 本身分开声明您的 B 特定常量:
public partial class A
{
public static partial class Constants
{
public const int ConstantA = 1;
}
}
public partial class A
{
public static partial class Constants
{
public const int ConstantB = 1;
}
}
public class B : A
{
static void M()
{
int i = Constants.ConstantB;
int j = Constants.ConstantA;
}
}
也就是说,我怀疑设计是否那么好。它具有在 A
内声明您的 ConstantB
值的效果,这似乎与封装的目标相反,假设 ConstantB
确实仅与 class B
相关.如果您以这种方式声明它,ConstantB
可以通过 any 以任何类型使用 Constants
class 访问。
但是如果您对此没有意见,并且只是想确保常量的 声明 与 B
class 保持一致,那么上面的就可以了。
其他选项包括继续并隐藏(使用 new
关键字)基数 Constants
class,但有一点不便,即必须指定基数 class作为完全合格的访问基值(例如 A.Constants.ConstantA
),隐藏基 class 并让 B.Constants
class 继承 A.Constants
(需要放弃 static
class 属性)或者,恕我直言,更好的是,根本不使用嵌套的 class,而是将 Constants
classes 放在各自的命名空间中。
我有两个 class,A 和 B。B 继承自 A。
这是我的问题:我有一个常量 ConstantA,它对 class A 很有用,但对子 classes 也很有用。我还有一个常量 ConstantB,它是我的 class B 特有的。
由于我将我的常量存储在 public 静态嵌套 class 中,子 class 中的常量 class 隐藏了父常量。我尝试将其设为部分 class,但没有帮助。有什么办法可以解决这个问题吗?
这是一个例子:
public class A
{
public static partial class Constants
{
public const int ConstantA = 1;
}
}
public class B : A
{
public static partial class Constants
{
public const int ConstantB = 1;
}
}
谢谢!
只需让您的 ConstantA 成为您父级 class 的属性,将此属性放入嵌套 class 中即可将其从继承 class 的范围中删除。
如果你真的想要嵌套classes,你可以留下static
关键字,并为B.Constants
嵌套class做继承:
public class A
{
public class Constants
{
public const int ConstantA = 1;
}
}
public class B : A
{
public new class Constants : A.Constants
{
public const int ConstantB = 2;
}
}
用法相同
您还需要将 A
设为部分 class,并与 B
class 本身分开声明您的 B 特定常量:
public partial class A
{
public static partial class Constants
{
public const int ConstantA = 1;
}
}
public partial class A
{
public static partial class Constants
{
public const int ConstantB = 1;
}
}
public class B : A
{
static void M()
{
int i = Constants.ConstantB;
int j = Constants.ConstantA;
}
}
也就是说,我怀疑设计是否那么好。它具有在 A
内声明您的 ConstantB
值的效果,这似乎与封装的目标相反,假设 ConstantB
确实仅与 class B
相关.如果您以这种方式声明它,ConstantB
可以通过 any 以任何类型使用 Constants
class 访问。
但是如果您对此没有意见,并且只是想确保常量的 声明 与 B
class 保持一致,那么上面的就可以了。
其他选项包括继续并隐藏(使用 new
关键字)基数 Constants
class,但有一点不便,即必须指定基数 class作为完全合格的访问基值(例如 A.Constants.ConstantA
),隐藏基 class 并让 B.Constants
class 继承 A.Constants
(需要放弃 static
class 属性)或者,恕我直言,更好的是,根本不使用嵌套的 class,而是将 Constants
classes 放在各自的命名空间中。