除了Inner类之外,C#中是否可以存在私有类?
答案 0 :(得分:38)
根本没有。除非它在嵌套类
中,否则什么都没有未嵌套在其他类或结构中的类和结构可以是 public 或 internal 。声明为public的类型可由任何其他类型访问。声明为internal的类型只能由同一程序集中的类型访问。除非将关键字public添加到类定义中,否则类和结构声明为内部默认。
类或结构定义可以添加内部关键字以使其访问级别显式。访问修饰符不会影响类或结构本身 - 它始终可以访问自身及其所有成员。
可以将struct成员(包括嵌套类和结构体)声明为public,internal或private。类成员(包括嵌套类和结构)可以是公共的,受保护的内部,受保护的,内部的或私有的。默认情况下,类成员和结构成员(包括嵌套类和结构)的访问级别是私有的。无法从包含类型外部访问专用嵌套类型。
派生类的基本类型不具有更大的可访问性。换句话说,你不能拥有一个派生自内部类A的公共类B.如果允许这样做,它将具有使A成为公共的效果,因为A的所有受保护或内部成员都可以从派生类访问。
<小时/> 您可以使用InternalsVisibleToAttribute启用特定的其他程序集来访问内部类型。
答案 1 :(得分:8)
不,没有。除非它是嵌套的,否则你不能拥有私有类。
答案 2 :(得分:2)
在什么情况下,对于一个天生的课程,你想要一个'私人'课程吗?
您可以使用internal
修饰符创建仅在当前程序集中可见的类。
// the class below is only visible inside the assembly in where it was declared
internal class MyClass
{
}
答案 3 :(得分:2)
没有。 这类课程的范围是什么?
答案 4 :(得分:1)
我们可以在其他类中声明一个类为Private。请找到以下代码,了解如何实现相同目标:
public class Class1
{
temp _temp ;
public Class1()
{
_temp = new temp();
}
public void SetTempClass(string p_str, int p_Int)
{
_temp.setVar(p_str, p_Int);
}
public string GetTempClassStr()
{
return _temp.GetStr();
}
public int GetTempClassInt()
{
return _temp.GetInt();
}
private class temp
{
string str;
int i;
public void setVar(string p_str, int p_int)
{
str = p_str;
i = p_int;
}
public string GetStr()
{
return str;
}
public int GetInt()
{
return i;
}
}
}