为什么访问另一个对象实例的私有函数有效
本文关键字:函数 有效 实例 访问 一个对象 为什么 | 更新日期: 2023-09-27 17:56:36
可能的重复项:
为什么私有字段是类型私有字段,而不是实例私有字段?
请考虑以下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test
{
class Program
{
static void Main(string[] args)
{
Foo foo = new Foo();
Foo foo2 = new Foo();
foo.Test(foo);
Console.ReadLine();
}
}
public class Foo
{
public void Test(Foo foo)
{
Console.WriteLine("I was called");
foo.test_fuction();
}
private void test_fuction()
{
Console.WriteLine("!");
}
}
}
在这种情况下,我希望 private 关键字会阻止访问实例的成员变量和函数。这难道不会允许某人写一些写得不好的对某些对象的迂回访问吗?有没有办法防止这种行为?还是有充分的理由?
Private 表示成员可以在声明它的类型的主体中访问,而不仅仅是由给定实例访问。
无法阻止此行为。如果只有特定实例可以访问私有成员,则静态方法的用处将小得多。
从规范的第 3.5.2 节:
在程序 P 中的类型 T 中声明的嵌套成员 M 的可访问性域定义如下(注意 M 本身可能是一个类型):
如果 M 声明的可
- 访问性是私有的,则 M 的可访问性域是 T 的程序文本。