C# 在C中操纵密封类型#
例如,我想向C# 在C中操纵密封类型#,c#,oop,inheritance,extension-methods,C#,Oop,Inheritance,Extension Methods,例如,我想向integer(即Int32)添加一个方法,这将使我能够执行以下操作: int myInt = 32; myInt.HelloWorld(); 可以说,您不必坚持执行上述操作,而是可以编写一个方法,该方法采用整数,HelloWorld(integer),如下所示: int myInt = 32; HelloWorld(myInt); 然而,我只是好奇这是否可能。如果为真,那么向已知类添加一些其他功能是否是一种良好的编程实践 PS:我尝试创建另一个类,该类继承自Int32,但无法派
integer
(即Int32
)添加一个方法,这将使我能够执行以下操作:
int myInt = 32;
myInt.HelloWorld();
可以说,您不必坚持执行上述操作,而是可以编写一个方法,该方法采用整数
,HelloWorld(integer)
,如下所示:
int myInt = 32;
HelloWorld(myInt);
然而,我只是好奇这是否可能。如果为真,那么向已知类添加一些其他功能是否是一种良好的编程实践
PS:我尝试创建另一个类,该类继承自
Int32
,但无法派生自密封类型“int”。您可以为Int32
添加扩展方法
public static class Int32Extensions
{
public static void HelloWorld(this int value)
{
// do something
}
}
只需记住使用类所在的名称空间。。
从面向对象的角度讲,它们没有什么错,因为您既不能访问私有变量,也不能以任何方式改变对象的行为
这是你所描述的唯一语法上的甜点。我想你提到了扩展方法使用扩展方法
static class Program
{
static void Main(string[] args)
{
2.HelloWorld();
}
public static void HelloWorld(this int value)
{
Console.WriteLine(value);
}
}
您可以使用扩展方法
像这样:
public static class IntExtensions
{
public static string HelloWorld(this int i)
{
return "Hello world";
}
}
Q:在已知类中添加一些其他功能是一种很好的编程实践吗
这种类型的讨论实际上属于“程序员”
请看一下关于程序员的讨论,其中有很多关于使用扩展方法的哲学观点:
此外:
我认为您需要扩展方法尽管扩展方法可以做到这一点(正如其他人所指出的),但我建议您不要对基本类型(如“int”)这样做。对于一个维护工程师来说,一年后查看您的代码并想知道数字32表示“你好”意味着什么,而不是像World.SayHello(32)这样的东西,这就不那么直观了。扩展方法的直观感觉是,扩展对象正在做一些事情,但是很少有一个数字应该积极地做。