怎样修改一个类中的数据成员_C#中静态成员、静态方法、静态类

平时在用C#做开发的朋友都知道,不论是静态成员还是静态方法还是静态类都是用static关键字来修饰。

a3afafaa28a6318036c5794ff3b73034.png

static关键字

也就是说只要看到了static,那么它后面的东西就是静态!在c#中,静态成员或者静态方法是属于类的,不是属于对象。假如我们有一个类MyClass,需要实例化这个 类,就应该这么做:

MyClass myclass = new MyClass();

在这里,MyClass是类,myclass是对象。如果这个类中有个静态方法static SayHello(),我们调用的时候就应该写成:

MyClass.SayHello();

还记得我们写的第一个程序“Hello World"吗? 仔细一看就会发现,原来Main()方法就一个静态方法。

0a960337715d6699df6bac2afda5e011.png

经典的Hello World

Main()方法在Program类中,它是程序的入口点。那么Main()方法为什么要是静态的呢?因为操作系统在调用我们写的程序运行时,首先要找到程序入口点Main()方法,如果Main()方法不是静态的,那么这个方法是属于对象的,也就意味着在调用Main()之前需要先实例化Program类的一个对象,再用对象来调用。那么问题来了,程序入口都进不去,怎么来实例化对象呢?程序无法运行了。所以需要把Main()方法设置为静态方法,这样操作系统在调用这个方法时不需要实例化对象,直接通过类名Program来调用Main()方法即可。

其实上面我们用到的WriteLine() ReadKey()都是静态方法,它们是属于Console类的,而且Console就是一个静态类!

接下来做几个测试:

在Program类中添加一个方法SayHello(),然后在Main()方法中调用它

c5c09e7bec25bdb929b5779c4d169271.png

静态方法中调用非静态方法

我们发现SayHello()下面有红色波浪线条,并提示有错误: 非静态的字段、方法或属性“ConsoleApplication1.Program.SayHello()”要求对象引用。因为我刚刚写的SayHello()方法不是静态的,非静态方法是属于对象的。而Main()方法是静态方法,调用一个非静态方法,我们就得实例化一个对象来调用它,需要修改成这样才可以:

Program myprogram = new Program();

myprogram.SayHello();

或者我们将SayHello()方法改为静态方法,在方法名前面加上static关键字。

在Program类前加上static,让Program类变成静态类

a71f634f13f97ba06dca265d6650bf19.png

静态类

我们发现又有错误了,

错误 1 无法声明静态类型“ConsoleApplication1.Program”的变量

错误 2 无法创建静态类“ConsoleApplication1.Program”的实例

哦,原来是因为我在Program类名前加了static 那么Program类就成为了一个静态类。静态类是不可以被实例化的,而且静态类中只能有静态方法或者静态成员。SayHello()是一个实例成员,它是不可以在静态类中声明的,所以我们再修改一下,变成下面这样:

a64e011c0fdfcc0cda85d5894a94b642.png

静态类 静态方法

现在编译运行正常了。

接下来简单介绍几个微软提供给我们的常用静态类

  1. Console类
  2. File类
  3. Environment类

Console类、Environment类就不说了,来看一下File类几个常用的静态方法:

public static string ReadAllText(string path)//读取文本文件的所有内容

public static StreamReader OpenText(string path)//打开一个文本文件返回一个流

public static StreamWriter CreateText(string path)//创建一个文件返回一个写入流

public static void Copy(string sourceFileName, string destFileName)//拷贝文件

public static void WriteAllLines(string path, IEnumerable contents, Encoding encoding)

//写入所有的行
public static void WriteAllText(string path, string contents)//写入所有的内容

public static byte[] ReadAllBytes(string path)//读取所有的字节

这些静态方法在平时是经常用?用起来是不是很爽?直接用类名File调用静态方法飞起!

好了,喜欢我的文章的朋友请关注我,我会定期更新,请帮忙转发点赞,谢谢!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值