public,static修饰符与创建实例-C#

public修饰符

using System;
using System.Collections.Generic;
using System.Text;

namespace CSharplearn
{
    class 被输出对象
    {
        public string a;
        
    }
    class Program
    {
        static void Main(string[] args)
        {
            被输出对象 b = new 被输出对象();
            b.a = "Hello World";
            Console.WriteLine(b.a);
        }
    }
}

上面程序写了一个"被输出对象"类,里面有一个字段a.Main()首先实例化了被输出对象这个类,然后向字段a里赋值"Hello World",最后打印该字段.
其中可以字段a前面跟了一个public,这到底是什么意思.
首先我们试试把public删除.然后可以发现
报错了
底下的程序报错了,说是有什么什么保护级别.所以只有加了public我才可以跳出类去使用这个字段.
于是你就容易理解什么是访问修饰符.

  • public:公开的,可以在外部任何地方使用
  • internal:内部的,可以在当前项目中使用
  • private(默认):私有的,只能在自己类的内部使用

static修饰符

如果给"被输出的对象"类和字段a加上static修饰符程序就可以省去实例化对象,来看看变化.

using System;
using System.Collections.Generic;
using System.Text;

namespace CSharplearn
{
    static class 被输出对象
    {
        public static string a;
        
    }
    class Program
    {
        static void Main(string[] args)
        {
            被输出对象.a = "Hello World";
            Console.WriteLine(被输出对象.a);
        }
    }
}

省去了"被输出对象 b = new 被输出对象();",感觉很方便?是不是所有类都可以加上static修饰符以便于后面调用该类的时候直接 . 一下就可以调用方法和属性?
我们再看一段代码

using System;
using System.Collections.Generic;
using System.Text;

namespace CSharplearn
{
    static class 被输出对象
    {
        public static string a = "Hello World";
    }
    class 打印方法 
    {
        public void print() 
        {
            Console.WriteLine(被输出对象.a);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            打印方法 method = new 打印方法();
            method.print();
            Console.WriteLine(被输出对象.a);
            被输出对象.a = "Hello Earth";
            method.print();
            Console.WriteLine(被输出对象.a);
        }
    }
}

结果:
Result
前面两句method.print()和Console.WriteLine(被输出对象.a)不难理解,他们理应输出"被输出对象.a",也就是初始化时给的"Hello World".但注意后面,当我给"被输出的对象.a"赋了新的字符串,两个输出语句输出的内容也跟着发生了变化.
于是可以得知,被 static 修饰的变量,被 static 修饰的方法统一属于类的静态资源,是类实例之间共享的.换言之,一处变,处处变.

创建实例

这篇知乎文章讲的很明白:
https://zhuanlan.zhihu.com/p/92207957
用我的话来讲,每个类就像是机械加工的模具,在你new它的时候,就相当于给模具倒上铁水,声明一个类变量就是做机器的外壳,当内容与外壳拼在一起的时候,你就可以使用它了.(当然实际不是这么回事)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值