C#问题:大伙能解释一下public和private的区别吗?

msdner 2003-12-06 02:11:18


昨天有人用下面的文字给我解释,很感谢他。但是还是有一点点疑问不能明白,请教大家。疑问:1、什么时候用public和private来修饰类(不是实例变量和方法)?
2、有这样的一个句子:“private static Elevator elevatorA;”这里面的static用和不用有什么区别呢?现在又表示什么意思?



/****************************************

1、public 、private修饰符是用来定义类、类(结构)中的方法,变量时用的。
public 是公有的.而private是私有的.一般把类中的方法定义为public的,把变量定义为private(起保护作有).还有一般把类定义为public.如果把类定义为private该类就变成没法使用了(实例化).
下面列举例子,说明public 和 private区别


//test.cs
using System;

public class class1
{
private int v1;
public int v2;
public void getv1(int v)
{
v1 =v;
}
public void PrintValue()
{
Console.WriteLine("v1 = "+v1+" v2 = "+v2);
}
}


class class2
{
static void Main()
{
class1 c1 = new class1();
c1.v2 = 2; //因为在class1中把变量定义public,所在可以在其它的类中直接调用
//不可以通 c1.v1 =1; 方法直接调用,因为v1是private.只能在类的内部调用.
c1.getv1(1); //通过方法getv1()给 v1赋值.
c1.PrintValue();
}
}
************************************************/
...全文
764 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
msdner 2003-12-07
  • 打赏
  • 举报
回复
好早呀,谢谢 ArLi2003!
ArLi2003 2003-12-07
  • 打赏
  • 举报
回复
在都不写的情况下

public class a1 { //默认是public
//xxxx
private class b1 { //默认是private
//xxxx
}
}
ArLi2003 2003-12-07
  • 打赏
  • 举报
回复
而private class 通常是存在于类中类,比如下面的b1

public class a1 {
//xxxx
private class b1 {
//xxxx
}
}
ArLi2003 2003-12-07
  • 打赏
  • 举报
回复
晕...,class 是不能声明成 private 的,只能是public,而有必须将class 设置成private 那么可以使用private 构造,比如

public class a1{
private a1{

}
}

当a1 没有public 构造时,你是无法在类外用实例句柄调用它的
msdner 2003-12-06
  • 打赏
  • 举报
回复
很感谢 LiSDN(LOCK ON),这样解释感觉没有冲突了,谢谢。其它网友解释为:在声明class时,如果没有访问修饰符,默认是private的,所以感到很困惑,谢谢大家。
LiSDN 2003-12-06
  • 打赏
  • 举报
回复
你需要知道默认的访问修饰符:
在c#中,变量、方法在class和struct中默认是private,
在vb中,变量、方法在class和struct中默认是public,
在声明class时,如果没有访问修饰符,默认时public的
msdner 2003-12-06
  • 打赏
  • 举报
回复
哎,谢谢大家 ,我的意思。不加public不是也可以用么?比如上面的程序里class Elevator可以用class Person里的东西
syntone 2003-12-06
  • 打赏
  • 举报
回复
你家有椅子吗?如果你把椅子放在大街上,那就是Public,是公用的, 如果放在家里,那就是private的,是给你自己用的,呵呵,大致是这样!·
msdner 2003-12-06
  • 打赏
  • 举报
回复
TO snewxf(心疤) :买了一本书,我感到模糊的地方上面都不讲,所以只好来问了。
msdner 2003-12-06
  • 打赏
  • 举报
回复
是的,我是说这里面有什么含义里头?比如 public class Class1 这个修饰成public后,怎么看出它的作用?它提供了哪些功能?好像 public class Class1 能做的事,class Class1 也能做,看不出哪里区别了。
snewxf 2003-12-06
  • 打赏
  • 举报
回复
建意你看看C#语法!买本书来看看!这样能很系统的学习!
xueyhfeng 2003-12-06
  • 打赏
  • 举报
回复
回复人: wanbaocheng(www) ( ) 信誉:99 2003-12-06 16:42:00 得分:0

1. 若不加public,则默认是private

--------------------------
如不加 pubiic 就等于是写的 private class class1


msdner 2003-12-06
  • 打赏
  • 举报
回复
这个问题不太懂:“public class class1和class class1 当中加不加public有什么区别?”
各位帮忙了。
msdner 2003-12-06
  • 打赏
  • 举报
回复
很感谢wanbaocheng(www),又明白了一点东西了,谢谢。

这个问题不太懂:“public class class1和class class1 当中加不加public有什么区别?”
各位帮忙了。
wanbaocheng 2003-12-06
  • 打赏
  • 举报
回复
1. 若不加public,则默认是private
2. 实际上上面的朋友已经作了很好的解答,稍作补充。Main()必须声明为静态的,这你应该了解。假设在Building类中把elevatorA声明为类的域,为了调用该域,必须创建Building类的实例,而你在Main()函数中并没有创建Building类的实例,你还想直接调用域elevatorA,当然产生错误!你若把elevatorA声明为静态的,它就隶属于类本身,而不隶属于任何对象,这样你在Main()中直接调用就没有错误啦。
不知对你而言能否明白,再说。
msdner 2003-12-06
  • 打赏
  • 举报
回复
谢谢大家。可能我问题没说清楚。。。我的意思是public class class1和class class1这里加不加public有什么区别?是不是默认的就已经加了public了?

另外一个是关于static的问题,看下面这个程序注释的地方,谢谢大家,分不够可以加:

using System;

class Building
{
private static Elevator elevatorA; //这里如果不加static程序编译无法通过,为什么?

public static void Main()
{
Console.WriteLine("The simulation has commenced");
elevatorA = new Elevator();
elevatorA.LoadPassenger();
elevatorA.InitiateNewFloorRequest();
elevatorA.InitiateNewFloorRequest();
elevatorA.InitiateNewFloorRequest();
elevatorA.InitiateNewFloorRequest();
elevatorA.InitiateNewFloorRequest();
elevatorA.InitiateNewFloorRequest();
elevatorA.InitiateNewFloorRequest();
elevatorA.InitiateNewFloorRequest();
elevatorA.InitiateNewFloorRequest();
elevatorA.InitiateNewFloorRequest();
elevatorA.ReportStatistic();
Console.WriteLine("The simulation has ended");
Console.ReadLine();
}
}

class Elevator
{
private int currentFloor = 0;
private int requestedFloor = 0;
private int totalFloorsTraveled = 0;
private int totalTripsTraveled = 0;
private Person passenger; //而这里加和不加static都可以通过为什么?

public void LoadPassenger()
{
passenger = new Person();
}

public void InitiateNewFloorRequest()
{
requestedFloor = passenger.NewFloorRequest();
Console.WriteLine("elevatorA:Departing floor:" + currentFloor + "Traveling to floor:" + requestedFloor);
totalFloorsTraveled = totalFloorsTraveled + Math.Abs(currentFloor - requestedFloor);
totalTripsTraveled = totalTripsTraveled + 1;
currentFloor = requestedFloor;
}

public void ReportStatistic()
{
Console.WriteLine("Total floors traveled:" + totalFloorsTraveled);
Console.WriteLine("Total trips traveled:" + totalTripsTraveled);
}

}

class Person
{
private Random randomNumberGenerator;

public Person()
{
randomNumberGenerator = new Random();
}

public int NewFloorRequest()
{
return randomNumberGenerator.Next(0,50);
}
}
Edifier0709 2003-12-06
  • 打赏
  • 举报
回复
上面两位老兄说得好明白啦...我也就不说了..

LiSDN 2003-12-06
  • 打赏
  • 举报
回复
public
定義公共類型﹕變量﹑結構﹑類﹑屬性﹑方法
private
定義私有類型﹕變量﹑屬性﹑方法
static
定義靜態成員﹕就是無需實例化也可以訪問的成員
ArLi2003 2003-12-06
  • 打赏
  • 举报
回复
static 表示静态,它与该实例无关,在任何地方都可以使用“完全限定名”进行访问,而实例对象则不同,它属于该实例中的一个对象,该实例必须被实例化过才会存在这个对象,也必须使用实例句柄来访问它。

public 和 private 是表示它的有效(作用)域,出了这个有效域(某对象是 private 且在类外访问),就算能访问(比如为 static)到也无效

可见,二个是完全不同的概念,静态、非静态和 public、private 完全是二回事,一个是成员类型一个是有效范围

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧