0

可能重复:
为什么私有字段是类型私有的,而不是实例私有的?

考虑以下代码:

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 关键字会阻止访问实例的成员变量和函数。这不会允许某人编写一些写得不好的对某些对象的迂回访问吗?有没有办法防止这种行为?还是出于充分的理由?

4

1 回答 1

0

私有意味着该成员可以在声明它的类型的主体内访问,而不仅仅是给定实例可以访问。

没有办法阻止这种行为。如果只有特定实例可以访问私有成员,则静态方法的用处会小得多。

从规范的第 3.5.2 节:

在程序 P 中以类型 T 声明的嵌套成员 M 的可访问域定义如下(注意 M 本身可能是一个类型):

  • 如果 M 声明的可访问性是私有的,则 M 的可访问域是 T 的程序文本。
于 2013-01-28T21:35:01.860 回答