从另一个文件访问私有类

时间:2012-09-26 10:27:53

标签: c# .net private

我想将我的.cs文件分开,主要是因为我认为它看起来更整洁。在一个.cs文件中我有Form.cs.我在.NET framework 2.0中工作。所以我有一个不同的myClass.cs文件,有几种方法。由于我希望表单的用户在访问方法中调用的Web服务之前提供身份验证,因此我希望信息是私有的。 我在示例和教程中看到,在同一个文件中通常没有问题。但是,在我的目标中,我希望信息位于class.cs文件中。例如,我希望myClass.cs文件中的类看起来像这样(这很粗糙):

    private class SessionData
    {
        private String fTicket;
        private string otherData;

        public SessionData( String ticket, String otherData)
        {
            fTicket = ticket;
            fotherData = otherData;
        }

        public String getTicket{ return fTicket; };
    }

然后在form.cs文件中访问它......

    private void LogOn_Click(object sender, EventArgs e)
    {

         myClass sessInfo = new myClass();

         string myTicket = sessInfo.SessionData();
         }
    }

问题在于,因为它是私有的,我无法在Form.cs.中访问它。甚至可以这样做吗?我已经看过一堆示例和提示,但总是在同一个文件中。 无论如何,这是我头脑中的基本想法。如果还有另一种方式我可以提供建议!

我是否必须制作一个公共构造函数,有人能指出我的例子吗?

2 个答案:

答案 0 :(得分:4)

我认为,在不广播信息的意义上,对于凭证保持“私密”的必要性存在困惑,并且在类型范围的意义上,用于OO可访问性的术语“私有”。这两者是不可互换的,是完全不同的想法。

使用C#类型辅助功能尝试保护敏感信息的解决方案是荒谬的,绝对是错误的方法。我可能会问另一个问题,即如何在用户登录期间最好地保护敏感信息。

<小时/> 旧答案:

我假设SessionData是一个嵌套类?您不能在名称空间中定义私有类。

如果定义私有嵌套类,则只有包含此私有类的类型才能使用它,而不管构造函数是否可访问。

实际上,如果您想公开SessionData,请将其公开。

如果代码全部在同一个程序集中,您还可以使SessionData内部:

internal class SessionData { }

此程序集之外的代码将无法引用SessionData

答案 1 :(得分:4)

你可以在一个单独的文件中定义嵌套类,例如'Session Data.cs',只需将它包装在应该有权访问它的部分类中。

public partial class Form1
{
    private class SessionData
    {
        public void getTicket();
    }
}