C#基础系列第三篇
前言: 完全是我在学习过程中记录的笔记,只不过分享一下让很多刚开始学习.net编程的人能够很快的学会C#语言
- 访问修饰符(1)
(1)用在类型上面
1)public 表示在任何地方都能够被访问
2)internal 表示只能在当前项目中被访问
(2)用在成员上面(字段方法等)
1)public 可以在任何地方被访问
2)private
3)protected
4)internal 表示只能在当前程序集完全公开
5)protected internal
(3)图示说明5个访问修饰符的关系
- 访问级别约束
(1) 子类的访问级别不能比父类的高
class MyBase
{
}
public class MySub:MyBase
{
}
//这样写是错误的
(2) 字段和属性的访问级别不能高于对应成员的访问级别
class MyField
{
}
public class MyClass
{
MyField m;
public MyField M
{
get{return m;}
set{m=value;}
}
}
//这样写是错误的
(3) 方法的访问级别不能高于参数与返回值的访问级别
class MyInternal
{
}
public class MyClass
{
public MyInternal Func(MyInternal f)
{
}
}
//这样写是错误的
(4)"可访问性不一致"的错误
(5)不允许访问不可访问的成员 //写代码遵循这句话
- 静态方法
(1) 语法:
public static 返回类型 方法名(参数名)
{
//过程
}
(2) 静态方法通过类名进行调用
class MyStatic
{
public static string GetString(string str)
{
return "$" + str + "$";
}
}
class Program
{
static void Main(string[] args)
{
string Name = MyStatic.GetString("韩迎龙");
Console.WriteLine(Name);
}
}
(3)静态方法,静态字段等都称为静态成员
1)静态成员属于类
2)实例成员属于当前对象
class WindowsPhone
{
public static int num;
public WindowsPhone()
{
num++;
}
string sim;
public string Sim
{
get { return sim; }
set { sim = value; }
}
}
class Program
{
//静态属于所有该类的对象,是类的一个成员,而实例成员只属于当前的实例
static void Main(string[] args)
{
for (int i = 0; i < 100; i++)
{
new WindowsPhone();
}
WindowsPhone windows = new WindowsPhone();
windows.Sim = "232434343";
Console.WriteLine(windows.Sim);
Console.WriteLine(WindowsPhone.num);
}
}
(4)静态成员和实例成员的使用
1)静态成员
->在静态方法中,可以访问静态成员
->在静态方法中,不可以直接访问实例成员
->调用前初始化
2)实例成员
->在实例方法中,可以直接访问静态成员
->在实例方法中,可以直接访问实例成员
->实例化对象时初始化
(5)如果一个类里面的成员全是静态的,那么可以将这个类写静态的
static class MyClass
{
//成员
}
(6)静态类的成员必须都是静态的
static class MyClass
{
public static int GetNum()
{
return new Random().Next();
}
}
class Program
{
static void Main(string[] args)
{
int num= MyClass.GetNum();
Console.WriteLine(num);
}
}
- 静态成员
(1) 给字段的赋值都是由构造方法完成的,即使写字段的时候,对其进行初始化,也是有构造方法赋值的
(2)如果调试的时候,回先执行字段的初始化过程,在进入到构造函数的。
class MyClass
{
public static int numStatic = 20;
//在构造方法里面赋值的
int num = 10;
public MyClass()
{
}
}
class Program
{
static void Main(string[] args)
{
new MyClass();
}
}
//断点调试先执行int num = 10;,在执行构造方法
(3)静态字段的赋值也是由静态构造方法完成的
1)语法:
static 类名()
{
//赋值过程
}
2)静态构造方法只能这样写
3)静态构造方法不允许手动调用,由系统自动调用
4)当程序第一次访问该类的时候(无论是静态还是非静态)
5)静态构造方法只被调用一次
class MyClass
{
public static int numS;
static MyClass()
{
numS = 10;
}
int numI;
public MyClass()
{
numI = 20;
}
}
class Program
{
static void Main(string[] args)
{
//第一种情况 访问实例成员
new MyClass();
new MyClass();
//第二种 访问静态成员
MyClass.numS = 40;
}
}
//在静态构造方法前面加断点执行
(4)构造方法的默认值
1)构造方法就是为字段赋值用的,如果没有显示的提供赋值,那么会有默认值
->数值类型 0
->字符类型 /0
->字符串类型 null
->bool类型 false
(5)静态成员只有在第一次访问的时候进行初始化,但是会一直保留在内存中
1)对于静态字段容易造成内存的溢出
class Program
{
static List<string> list = new List<string>();
static void Main(string[] args)
{
while (true)
{
list.Add("123232435343");
}
}
}
- 静态类的继承问题
(1) 静态类不允许被继承,静态类只能继承自object
(2)继承(多态)与静态是两个互斥的概念
(3)静态类不能实现任何接口
(4)sealed关键字
1)密封类(密闭类),表示不能别继承
2)string就是密封类
3)可以使用重写方法不再被重写
(5)静态类的本质
1)查看IL代码 :abstract+sealed
2)不允许实例化 abstract
3)不允许被继承 sealed
(6)举例说明:
class MyClass1
{
}
sealed class MyClass2
{
}
class MySub : MyClass1
{
}
class MySub2:MyClass2 //这样写是错误的
{
}
初心商城:初心商城
作者:韩迎龙(Kencery) MVC/.NET群:159227188如果您认为这篇文章还不错或者有所收获,您可以通过右边的“打赏”功能 打赏一杯咖啡,本页版权归作者和博客园所有,欢迎转载,但未经作者同意必须保留此段声明, 且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构