Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 私有类中属性的访问级别_C#_.net_Vb.net_Access Modifiers_Access Levels - Fatal编程技术网

C# 私有类中属性的访问级别

C# 私有类中属性的访问级别,c#,.net,vb.net,access-modifiers,access-levels,C#,.net,Vb.net,Access Modifiers,Access Levels,对于Private类,我应该将我的属性声明为Public还是Friend(在c#中是内部的)? 我的私有类不能被除它的父类之外的任何其他类访问 一般来说,尽量保持封装完好无损。你的课程之间的关系应该建立在“需要知道”的基础上 由于我不熟悉您的应用程序设计,我确信我过于简单化了,但我想问自己以下问题: 父类是唯一需要知道子类的类吗?如果是这样,它应该是私有的 如果不是,那么需要知道子类的所有其他实体是否都在同一个项目中?如果是这样,它应该是内部的 如果项目外部存在需要了解子类的实体,则子类应为p

对于Private类,我应该将我的属性声明为Public还是Friend(在c#中是内部的)?
我的私有类不能被除它的父类之外的任何其他类访问

一般来说,尽量保持封装完好无损。你的课程之间的关系应该建立在“需要知道”的基础上

由于我不熟悉您的应用程序设计,我确信我过于简单化了,但我想问自己以下问题:

  • 父类是唯一需要知道子类的类吗?如果是这样,它应该是私有的

  • 如果不是,那么需要知道子类的所有其他实体是否都在同一个项目中?如果是这样,它应该是
    内部的

  • 如果项目外部存在需要了解子类的实体,则子类应为
    public

至于属性。如果您决定将子类
设为私有
,则将属性设置为公共
唯一可以拥有类实例的对象是父类,它位于同一项目中,因此
internal
对于属性来说应该足够了

注意
C#没有
friend
修饰符。相反,您可以使用
internal
,或者最类似但不那么优雅的选项:

,因为您的类(嵌套类)是
private
唯一可以访问它的是它的容器(基类或父类)。在这种情况下,
public
internal
Friend
在VB中)没有任何区别,因为唯一可以访问嵌套类的是它的父类。
一般来说,如果有一天您想将访问修饰符更改为
public
,那么最好现在就预见它,并在
internal
public
之间进行选择。它很简单,如果您希望嵌套类的成员只在定义的程序集内看到,则使用<代码>内部< /代码>,否则考虑使用<代码>公共< /代码>。< /P>父类是什么意思?你的类是嵌套在类中还是什么?是嵌套类它们无论如何都是私有的(因为该类声明为私有的,这将取代其他所有内容)。所以在这种情况下你可以忘掉它。@ThomasWeller,他们无论如何都不会是私人的!因为类是嵌套的,所以父级可以访问公共和内部成员。C#internal==VB Friend@lomed这不是真的
friend
指定该类只能由一个特定类访问<代码>内部指定该类可由程序集中的任何类访问。@是否要指向文档中的相关零件?它与
internal
无关,并且在VB中有一个
friend
示例,该示例在C#first section中的同一上下文中不存在:指定只能从包含声明的程序集中访问一个或多个声明的编程元素。另请参见根据您的评论修改的@lomed