C#(三):命名空间、访问修饰符、枚举、集合、静态、只读、常量
admin
2024-04-30 18:46:20
0

命名空间、访问修饰符、枚举、集合、静态、只读、常量

    • 命名空间
    • 访问修饰符
    • `enum`
    • 集合
      • `List`
      • `ArrayList`
      • `Sort` 排序
      • `Hashtable`
      • `Dictionary`
    • static
    • `readonly` 和 `const`

命名空间

  • 命名空间是一个虚拟的集合
  • 命名空间中只能是 结构体枚举接口 等类型
  • 命名空间防止类名重复,更好的管理类
using System;
using AAA;namespace ConsoleAppDemo
{class MainClass{public static void Main(string[] args){Person.name = "Lee"; // using AAA; 默认会去使用AAA中的PersonBBB.Person.name = "Zhang";Animal.name = "Dog"; // using AAA; 默认会去使用AAA中的Animal}}}namespace AAA {static class Person{public static string name;}static class Animal{public static string name;}
}namespace BBB
{static class Person{public static string name;}namespace CCC{static class Person{public static string name;}}
}

访问修饰符

注意:权限低的访问不了权限高的,权限低的也当不了权限高的的父类

访问修饰符描述
private成员只能在类型的内部访问,这是默认设置
internal成员可在类型的内部或同一程序集的任何类型中访问
protected成员可在类型的内部或从类型继承的任何类型中访问
public成员在任何地方都可以访问
internal protected成员可在类型的内部、同一程序集的任何类型以及从该类型继承的任何类型中访问,与虚构的访问修饰符 internal_or_protected 等效
private protected成员可在类型的内部、同一程序集的任何类型以及从该类型继承的任何类型中访问,相当于虚构的访问修饰符 internal_and_protected。这种组合只能在C#7.2或更高版本中使用

enum

// 枚举中指定元素类型(并且只能配置成整型)及默认值
enum Weekday : int
{Sun = 0, Mon, Tue, Wed, Thu, Fri, Sat,
}internal class Program
{static void Main(string[] args){Console.WriteLine(Weekday.Sun);             // SunConsole.WriteLine(Weekday.Sun == 0);        // TrueConsole.WriteLine((int)Weekday.Sun == 0);   // TrueConsole.WriteLine(Weekday.Mon);             // Mon//Console.WriteLine(Weekday.Mon == 1);      // ErrorConsole.WriteLine((int)Weekday.Mon == 1);   // TrueConsole.WriteLine(Weekday.Tue);             // TueConsole.WriteLine((int)Weekday.Tue);        // 2Console.WriteLine(Weekday.Wed);             // WedConsole.WriteLine(Weekday.Thu);             // ThuConsole.WriteLine(Weekday.Fri);             // FriConsole.WriteLine(Weekday.Sat);             // SatWeekday weekday = Weekday.Sun;// 周日switch (weekday){case Weekday.Sun:Console.WriteLine("周日");break;case Weekday.Mon:Console.WriteLine("周一");break;case Weekday.Tue:Console.WriteLine("周二");break;case Weekday.Wed:Console.WriteLine("周三");break;case Weekday.Thu:Console.WriteLine("周四");break;case Weekday.Fri:Console.WriteLine("周五");break;case Weekday.Sat:Console.WriteLine("周六");break;}}
}

集合

class Person
{public string name;public int age;public Person(string name, int age){this.name = name;this.age = age;}
}

List

using System.Collections.Generic;internal class Program
{static void Main(string[] args){// List persons = new List();// persons.Add(new Person("Lee", 25));// persons.Add(new Person("ZhangSan", 30));List persons = new List{new Person("Lee", 25),new Person("ZhangSan", 30)};// List persons = new List// {//     new Person("Lee", 25),//     123,//     "abc"// };foreach (var person in persons){Console.WriteLine(person.name);Console.WriteLine(person.age);}}
}
 

ArrayList

using System.Collections;internal class Program
{static void Main(string[] args){// ArrayList personList = new ArrayList();// personList.Add(new Person("Lee", 25));// personList.Add(123);// personList.Add("abc");ArrayList personList = new ArrayList{new Person("Lee", 25),123,"abc"};foreach (var person in personList){Console.WriteLine(person); // ConsoleApp.Person 123 abc}}
}

Sort 排序

internal class Program
{static void Main(string[] args){ArrayList personList1 = new ArrayList();personList1.AddRange(new Person[] {new Person("001", "Lee", 25),new Person("002", "张三", 10),new Person("003", "李四", 20),new Person("004", "王五", 20),new Person("005", "赵六", 18),});personList1.Sort();foreach (Person person in personList1){//[001] Lee: 25//[003] 李四: 20//[004] 王五: 20//[005] 赵六: 18//[002] 张三: 10Console.WriteLine($"[{person.id}] {person.name}:{person.age}");}List personList2 = new List();personList2.AddRange(new Person[] {new Person("001", "Lee", 25),new Person("002", "张三", 10),new Person("003", "李四", 20),new Person("004", "王五", 20),new Person("005", "赵六", 18),});personList2.Sort();foreach (Person person in personList2){//[001] Lee: 25//[003] 李四: 20//[004] 王五: 20//[005] 赵六: 18//[002] 张三: 10Console.WriteLine($"[{person.id}] {person.name}:{person.age}");}}
}class Person : IComparable
{public string id;public string name;public int age;public Person(string id, string name, int age){this.id = id;this.name = name;this.age = age;}public int CompareTo(object obj){// 判断obj是不是Personif (obj is Person){// 将obj转型为Person类型Person person = obj as Person;//return age - person.age; // 升序return person.age - age; // 降序}return 0; // 默认}}

Hashtable

using System.Collections;Hashtable obj = new Hashtable();
obj.Add("name", "Lee");
obj.Add("age", 18);
obj.Add(6, true);//Hashtable obj = new Hashtable
//{
//    { "name", "Lee" },
//    { "age", 18 },
//    { 6, true }
//};ICollection keys = obj.Keys;
ICollection values = obj.Values;foreach (object key in keys)
{Console.WriteLine(key); // 6 age name
}foreach (object value in values)
{Console.WriteLine(value); // True 18 Lee
}foreach (DictionaryEntry item in obj)
{Console.WriteLine($"obj[{item.Key}]={item.Value}"); // obj[6]=True obj[age] = 18 obj[name] = Lee
}

Dictionary

using System.Collections.Generic;Dictionary dict = new Dictionary
{{ "name", "Lee" },{ "age", 18 },{ "sex", "男" }
};foreach (KeyValuePair item in dict)
{Console.WriteLine($"dict[{item.Key}]={item.Value}"); // dict[name]=Lee dict[age]=18 dict[sex]=男
}

static

  • 静态的属性是属于类的需要使用类进行访问
  • 非静态的属性是属于对象的需要实例化对象进行访问
    class MainClass
    {public static void Main(string[] args){// 解决打印中文乱码问题Console.OutputEncoding = System.Text.Encoding.UTF8;Person.Forefathers = "类人猿"; // 静态属性归类进行访问Person lee = new Person();lee.name = "ProsperLee"; // 非静态属性归对象进行访问lee.Info(); // 姓名:ProsperLeePerson zhang = new Person {name = "张三",};zhang.Info(); // 姓名:张三lee.ForefathersInfo(); // ProsperLee 的祖先是 类人猿zhang.ForefathersInfo(); // 张三 的祖先是 类人猿}}class Person
    {public static string Forefathers;public string name;public void Info(){Console.WriteLine($"姓名:{name}");}public void ForefathersInfo() {Console.WriteLine($"{name} 的祖先是 {Forefathers}");}}
    

静态类

  • 静态类不能实例化对象 static Xxx{} -> new Xxx() -> Error
  • 静态类中不允许写非静态的成员 static Xxx{ public void Fun(){} } -> Error
  • 静态类只能有一个父类 Object 不能继承也不能被继承

示例

class MainClass
{public static void Main(string[] args){Person.name = "Lee";Console.WriteLine(Person.name); // Person Show ~ LeeConsole.WriteLine(Person.name); // Lee}
}public static class Person {public static string name;static Person() {Console.WriteLine("Person Show ~");}}

用途

  • 一般用来设计工具类(只需要去调用类中的方法去实现功能,没必要实例化的类)

readonlyconst

  • const 常量必须拥有初始值, readonly 可以没有
  • readonly 可以在构造方法中进行赋值修改, const 不可以
class Person
{public readonly int x;// public const int y; // Errorpublic const int y = 100;public Person() {x = 200;// y = 200; // Error}}

相关内容

热门资讯

不卷流量卷算力,三大运营商集体... 【大河财立方 记者 李雯雯】5月19日,三大运营商盘中再度走强,其中中国电信领涨,收涨4.4%。资本...
港交所上市热潮彰显香港国际金融... 香港交易所的锣,最近有点忙不过来。 仅3月30日当天,这面锣就敲响了7次:四家公司上市,三只ETF挂...
嘉兴银行“新帅”确定:行长王芳... 嘉兴银行“新帅”确定:行长王芳升任党委书记 人民财讯5月19日电,据嘉兴银行消息,嘉兴市委常委、常务...
这届年轻人的置业逻辑变了!报告... 5月18日,58同城、安居客发布《2026青年置业报告》。这份基于数千名20-35岁年轻人的调研,揭...
金融让生活更美好|上银财富“5... 为更好地满足广大客户多元化、多层次的财富保值增值需求,上海银行于5月18日正式启动“518财富理想节...
追觅俞浩回应设立上百个BU:A... 来源:中国企业家 做企业不是开故事会,发展才能解释问题,发展才能解决问题 文|《中国企业家》记者 ...
原创 强... 2026年5月13日,深圳。华为和总资产1.5万亿的中国中化,正式签下一份深化战略合作协议。 一家...
金价,还在跌!警惕骗局—— 5月18日早盘,现货黄金短时下跌,失守4500美元/盎司,为3月底以来首次。 【此前报道:】5月19...
中国电信:选举柯瑞文为董事长;... 据每日经济新闻:5月19日,中国电信(601728.SH)公告称,公司第九届董事会第一次会议选举柯瑞...
2026第六届中国贵州国际能源... 5月18日,2026第六届中国贵州国际能源产业博览交易会(简称“贵州能博会”)在贵阳国际会议展览中心...
华为轮值董事长徐直军访问东风汽... 2026年5月19日,华为轮值董事长徐直军,华为公司高级副总裁、引望公司CEO靳玉志一行到访东风汽车...
20cm股热度渐升!涨停数追平... 财联社5月19日讯(编辑 梓隆),近期,创业板、科创板股热度较高,截至今日(5月19日)收盘,累计共...
原创 告... 1499,这个数字陪了我们好几年。买飞天茅台的人,对它太熟悉了。可就在3月30日晚上,贵州茅台一纸公...
美国30年期国债收益率升至20... 美国30年期国债收益率上升至5.177%,为2007年以来的最高水平。 (本文来自第一财经)
一人掌控2家国产存储龙头,57... 一个老板,左手握着国内芯片设计龙头兆易创新,右手攥着国产DRAM市场第一的长鑫科技,57亿关联交易深...
跟宇树一比,云深处太贵了? 营收仅宇树五分之一,估值倍数贵了约60%。 AIX财经(AIXcaijing)原创 作者|王汉星 编...
华曦达将在港交所上市:业绩波动... 来源|贝多商业&贝多财经 5月18日,深圳市华曦达科技股份有限公司(下称“华曦达”,HK:00901...
微纳星空科创板IPO拟募资50... 上交所&深交所 新 股 上 市 5月12日-5月18日,上交所无公司上市;深交所主板有2家公司上市。...
突发!伊朗股市,重新开市!特朗... 刚刚,伊朗股市恢复交易! 据央视新闻报道,当地时间5月19日,伊朗德黑兰证券交易所恢复股票交易。目前...