C#学习相关系列之数据类型类----嵌套类和嵌套方法(三)
2023-12-16 21:11:39
一、嵌套类
????????嵌套类是一种定义在另一个类内部的类。嵌套类可以访问其外部类的成员,包括私有成员,主要用于当该类仅仅被所在类使用,不需要外部进行显式地构造,且需要对所在类的成员进行大量访问操作的情况。
namespace ConsoleApplication11Anonymous
{
class Class1
{
private int x;
protected string str;
static int y;
public class Nested
{
int xx;
string ss;
void print()
{
//int y = x; //error,不能访问外部的非静态成员
int z = y; //OK ,可以访问外部的静态成员
}
public Nested(Class1 A)
{
xx = A.x; //通过外部类的实例来访问外部类私有成员
ss = A.str; //通过外部类的实例来访问外部类保护成员
}
}
}
class Program
{
static void Main(string[] args)
{
Class1 X = new Class1();
Class1.Nested CN = new Class1.Nested( X );
}
}
}
class Class2
{
private int x;
static private int y;
public void func()
{
//x = xx; //当前上下文中不存在名称“xx”
//x = zz; //当前上下文中不存在名称“zz”
//x = aa; //当前上下文中不存在名称“aa”
x = Nested.aa;
Console.WriteLine(x);
}
public void funcs()
{
//这个只能访问Nested类的public成员
Nested XX = new Nested();
x = XX.zz;
Console.WriteLine(x);
//x = XX.aa;//访问静态成员只能通过类名而不是实例
x = Nested.aa;
Console.WriteLine(x);
}
private class Nested
{
private int xx;
protected int yy;
public int zz;
public static int aa;
}
}
?
1、嵌套类的默认访问权限是private ,可以指定为public,protected,private,internal,protected internal。
2、嵌套类型可以访问外部类(包裹嵌套类的类),如果要访问外部类型,要把外部类通过构造函数传进一个实例。
3、嵌套类中只能访问外部类中的静态成员,不能直接访问外部类的非静态成员。
4、据C#作用域的规则,外部类只能通过内部类的实例来访问内部类的public成员,不能访问protected,private。
二、嵌套方法
public class OuterClass
{
private int outerValue = 10;
public void PrintOuterValue()
{
Console.WriteLine("Outer Value: " + outerValue);
// 嵌套方法示例
PrintInnerValue();
}
private void PrintInnerValue()
{
Console.WriteLine("Inner Value: " + outerValue);
}
}
????????在上面的例子中,
OuterClass
定义了一个名为PrintOuterValue
的方法,该方法内部调用了另一个方法PrintInnerValue
。PrintInnerValue
方法访问了外部类的私有成员outerValue
。在主程序中,我们可以创建OuterClass
的实例,并调用PrintOuterValue
方法来输出外部类和内部类的值。
文章来源:https://blog.csdn.net/qiaodahua/article/details/135036845
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!