c#中受保护和私有保护的区别是什么?
C#中的“受保护”和“受私有保护”访问修饰符有什么区别? 有人能举例说明吗 提前谢谢。这是关于。更具体:继承和多个程序集。考虑以下事项: 对于正常的c#中受保护和私有保护的区别是什么?,c#,access-modifiers,C#,Access Modifiers,C#中的“受保护”和“受私有保护”访问修饰符有什么区别? 有人能举例说明吗 提前谢谢。这是关于。更具体:继承和多个程序集。考虑以下事项: 对于正常的受保护的(随专用一起解释): 现在,私有保护的区别在于,它必须位于同一程序集中才能访问: 因此: 有效,但仅当A和Base都在同一程序集/dll/exe等中编译时有效 现在,既然清楚了,你什么时候会使用真正的受私人保护的 关于这一点可以说很多。一些人(包括我)会认为使用私有保护的是一种反模式,因为在我的观点中,它与。我必须说的是,尽管与《朋友》(
受保护的
(随专用
一起解释):
现在,
私有保护
的区别在于,它必须位于同一程序集中才能访问:
因此:
有效,但仅当A
和Base
都在同一程序集/dll/exe等中编译时有效
现在,既然清楚了,你什么时候会使用真正的受私人保护的
关于这一点可以说很多。一些人(包括我)会认为使用私有保护的是一种反模式,因为在我的观点中,它与。我必须说的是,尽管与《朋友》(friend)相反,《私人保护》(private protected)将“污垢”隔离,但它仍然是任意行为、逻辑,取决于其定义的位置
话虽如此,问题仍然存在,何时使用它。你可能会惊讶于我曾经准时使用过它,而且它非常有用
考虑以下情况:
- 具有概念性的、装饰模式样式化的代码库,例如一些
图形对象
系统
- 所有对象都将以各种方式“可渲染”李>
- 因为您有很多,所以创建一个仅为方便而使用的基类非常方便
- 您不希望让其他用户使用此功能,因为它没有很好的文档记录,并且确实指定了您的实现
- 这些课程本身是公开的
。。。。然后我会使用私有保护
;-) 这是关于天气的。更具体:继承和多个程序集。考虑以下事项:
对于正常的受保护的
(随专用
一起解释):
现在,私有保护
的区别在于,它必须位于同一程序集中才能访问:
因此:
有效,但仅当A
和Base
都在同一程序集/dll/exe等中编译时有效
现在,既然清楚了,你什么时候会使用真正的受私人保护的
关于这一点可以说很多。一些人(包括我)会认为使用私有保护的是一种反模式,因为在我的观点中,它与。我必须说的是,尽管与《朋友》(friend)相反,《私人保护》(private protected)将“污垢”隔离,但它仍然是任意行为、逻辑,取决于其定义的位置
话虽如此,问题仍然存在,何时使用它。你可能会惊讶于我曾经准时使用过它,而且它非常有用
考虑以下情况:
- 具有概念性的、装饰模式样式化的代码库,例如一些
图形对象
系统
- 所有对象都将以各种方式“可渲染”李>
- 因为您有很多,所以创建一个仅为方便而使用的基类非常方便
- 您不希望让其他用户使用此功能,因为它没有很好的文档记录,并且确实指定了您的实现
- 这些课程本身是公开的
。。。。然后我会使用私有保护
;-) Private protected意味着只允许在同一程序集中的派生类(子类)中使用基类的受保护成员变量(同一个dot-net dll)
这意味着,如果在程序集a内创建一个类,并从另一个程序集B中定义的另一个类派生该类,则程序集a中的类无法访问程序集B中类的受私有保护成员变量
但是,使用justprotectedmodifier允许在派生类时跨不同程序集使用受保护的成员变量
您还可以查看内部修饰符,它是跨程序集保护公共变量的类似机制。私有保护意味着只允许在同一程序集中的派生类(子类)内使用基类的受保护成员变量(相同的点网dll)
这意味着,如果在程序集a内创建一个类,并从另一个程序集B中定义的另一个类派生该类,则程序集a中的类无法访问程序集B中类的受私有保护成员变量
但是,使用justprotectedmodifier允许在派生类时跨不同程序集使用受保护的成员变量
您还可以查看内部修饰符,它是一种类似的机制,用于在程序集之间保护公共变量。我想您弄错了我的问题。。它的protected vs private protected,not protected vs private.Oh,lol,my bad:-)我的理解是,对于protected,受保护的成员可以在其类内通过派生类实例访问,而不管程序集如何,而对于Private protected-Private protected成员可由从包含类派生的类型访问,但只能在其包含程序集中访问。如果我错了,请纠正我。是的,你是对的。谢谢Stefan。谢谢你的支持。我想你把我的问题搞错了。。它的protected vs private protected,not protected vs private.Oh,lol,my bad:-)我的理解是,对于protected,受保护的成员可以在其类内通过派生类实例访问,而不管程序集如何,而对于Private protected-Private protected成员可由从包含类派生的类型访问,但只能在其包含程序集中访问。如果我是w,请纠正我
class Base
{
private bool X;
protected bool Y;
}
class A : Base
{
public void Foo()
{
X = false; //error: cannot access private member.
Y = true; //can access protected member, but only from classes with `: Base`
}
}
class B
{
public void Foo()
{
A a = new A();
a.X = false; //error: cannot access private member.
a.Y = false; //error: cannot access protected member.
}
}
class A : Base
{
public void Foo()
{
X = false; //error: cannot access private member.
Y = true; //can access protected member, but only from classes with `: Base` AND
//they need to be defined in the same assembly as Base
}
}