一起温习C#基础

本文详细介绍了C#中的new关键字的三种用途:作为运算符用于创建对象,作为修饰符用于隐藏基类成员,以及作为约束用于指定泛型参数必须具备公共无参数构造函数。通过具体代码示例展示了每种用途的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在 C# 中,new 关键字可用作运算符、修饰符或约束。

1)new 运算符:用于创建对象和调用构造函数。这种大家都比较熟悉,没什么好说的了。

2)new 修饰符:在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员。

3)new 约束:用于在泛型声明中约束可能用作类型参数的参数的类型。

关于第二种用法看下例:

Code:
  1. usingSystem;
  2. namespaceConsoleApplication1
  3. {
  4. publicclassBaseA
  5. {
  6. publicintx=1;
  7. publicvoidInvoke()
  8. {
  9. Console.WriteLine(x.ToString());
  10. }
  11. publicintTrueValue
  12. {
  13. get{returnx;}
  14. set{x=value;}
  15. }
  16. }
  17. publicclassDerivedB:BaseA
  18. {
  19. newpublicintx=2;
  20. newpublicvoidInvoke()
  21. {
  22. Console.WriteLine(x.ToString());
  23. }
  24. newpublicintTrueValue
  25. {
  26. get{returnx;}
  27. set{x=value;}
  28. }
  29. }
  30. classTest
  31. {
  32. staticvoidMain(string[]args)
  33. {
  34. DerivedBb=newDerivedB();
  35. b.Invoke();//调用DerivedB的Invoke方法,输出:2
  36. Console.WriteLine(b.x.ToString());//输出DerivedB的成员x值:2
  37. BaseAa=b;
  38. a.Invoke();//调用BaseA的Invoke方法,输出:1
  39. a.TrueValue=3;//调用BaseA的属性TrueValue,修改BaseA的成员x的值
  40. Console.WriteLine(a.x.ToString());//输出BaseA的成员x的值:3
  41. Console.WriteLine(b.TrueValue.ToString());//输出DerivedB的成员x的值,仍然是:1
  42. //可见,要想访问被隐藏的基类的成员变量、属性或方法,办法就是将子类造型为父类,然
  43. //后通过基类访问被隐藏的成员变量、属性或方法。
  44. }
  45. }
  46. }
  47. new约束指定泛型类声明中的任何类型参数都必须具有公共的无参数构造函数.请看下例:
  48. usingSystem;
  49. usingSystem.Collections.Generic;
  50. namespaceConsoleApplication2
  51. {
  52. publicclassEmployee
  53. {
  54. privatestringname;
  55. privateintid;
  56. publicEmployee()
  57. {
  58. name="Temp";
  59. id=0;
  60. }
  61. publicEmployee(strings,inti)
  62. {
  63. name=s;
  64. id=i;
  65. }
  66. publicstringName
  67. {
  68. get{returnname;}
  69. set{name=value;}
  70. }
  71. publicintID
  72. {
  73. get{returnid;}
  74. set{id=value;}
  75. }
  76. }
  77. classItemFactory<T>whereT:new()
  78. {
  79. publicTGetNewItem()
  80. {
  81. returnnewT();
  82. }
  83. }
  84. publicclassTest
  85. {
  86. publicstaticvoidMain()
  87. {
  88. ItemFactory<Employee>EmployeeFactory=newItemFactory<Employee>();
  89. ////此处编译器会检查Employee是否具有公有的无参构造函数。
  90. //若没有则会有TheEmployeemusthaveapublicparameterlessconstructor错误。
  91. Console.WriteLine("{0}'IDis{1}.",EmployeeFactory.GetNewItem().Name,EmployeeFactory.GetNewItem().ID);
  92. }
  93. }
  94. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值