类成员的访问类型(又称访问修饰符)
应该有四种,但我能理解的先只有两种:public与private。
private定义的成员在外部无法访问到,如果外部强行访问,编译器告错,示例代码如下:
1using System;
2
3class m
4{
5 static void Main()
6 {
7 point p=new point();
8 Console.WriteLine("x=" + p.x.ToString());
9 }
10}
11
12class point
13{
14 private double x=10;
15}
16
2
3class m
4{
5 static void Main()
6 {
7 point p=new point();
8 Console.WriteLine("x=" + p.x.ToString());
9 }
10}
11
12class point
13{
14 private double x=10;
15}
16
编译时出错提示如下:
p.cs(8,30): error CS0122: “point.x”不可访问,因为它受保护级别限制
p.cs(14,17): (与前一个错误相关的符号位置)
如果第14行改为public就不会出错了。
默认是什么?
当我把14行的private去掉,只写double x=10;,编译结果与private一样,由此可以感觉出默认情况下是private的。
在VB6的控件编程中,我也是把控件的属性存在私有变量中,而用Let(或Set)与Get这两个特殊子程序来与外界沟通。如果把它移到C#中,Let与Get变为set与get。代码则写成如下:
//前面相同,省略
class point
{
double m_x=10;
public double x
{
get { return m_x; }
set { m_x = value; }
}
}
class point
{
double m_x=10;
public double x
{
get { return m_x; }
set { m_x = value; }
}
}
这样就没问题了,其中我自己设定私有变量全部用m_为开头。VB中Let是有带参数的,C#中却把参数都省了,将要设的值就是value,任何类型都用value来代替,统一,我喜欢。但与VB的代码对比一下,却发现VB的Let有时还可以多带一个索引,C#中索引如何表达?
另外,我还在IDE环境中试一了下,如果类型为枚举值,在set中使用value能不能智能感知出其取值的可能性。结果是可以的,IDE中value的类型与x的类型保持一致。
//前面相同,省略
class point
{
enum POS_X
{
P_LOW = 10,
P_MID = 20,
P_HIG = 30
};
POS_X m_x=10;
public POS_X x
{
get { return m_x; }
set { m_x = value + POS_X.P_LOW; }
}
}
class point
{
enum POS_X
{
P_LOW = 10,
P_MID = 20,
P_HIG = 30
};
POS_X m_x=10;
public POS_X x
{
get { return m_x; }
set { m_x = value + POS_X.P_LOW; }
}
}
当你输入到“set { m_x = value +”时,IDE自动弹出POS_X及相应内容。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用