C# 获取对类的写入属性的访问权限
我还没有练习oop。。现在我知道了它的重要性:) 我有很多方法,现在我喜欢将收集的字符串保存在公共变量中,以便能够从另一个函数访问它们 通常,我只使用get和set生成公共或私有变量 但我认为这并不干净,因为这些属性在“每一种智能感知”中都是可见的 我认为在类中这样做可能是“testClass”,并在那里定义属性 但是现在,我如何访问写入这个类的属性中的值呢?要在中编写它们,我必须创建类的新实例,但是如何访问创建的实例呢 //编辑C# 获取对类的写入属性的访问权限,c#,asp.net,C#,Asp.net,我还没有练习oop。。现在我知道了它的重要性:) 我有很多方法,现在我喜欢将收集的字符串保存在公共变量中,以便能够从另一个函数访问它们 通常,我只使用get和set生成公共或私有变量 但我认为这并不干净,因为这些属性在“每一种智能感知”中都是可见的 我认为在类中这样做可能是“testClass”,并在那里定义属性 但是现在,我如何访问写入这个类的属性中的值呢?要在中编写它们,我必须创建类的新实例,但是如何访问创建的实例呢 //编辑 protected void GetValues() {
protected void GetValues()
{
// Access to the public variable town.
string myNewtown = publictown;
string myNewName = publicname;
// How to acces to the values which I saved in the class informations?
// I like anything like that
string myNewtown = informations.publictown;
string myNewName = informations.publicname;
// or
string myNewtown = myinfo.publictown;
string myNewName = myinfo.publicname;
}
protected void Setvalues()
{
informations myinfo = new informations()
{
publicname = "leo",
publictown = "london"
};
}
private string publicname { get; set; }
private string publictown { get; set; }
private class informations
{
public string publicname { get; set; }
public string publictown { get; set; }
}
谢谢如果您希望在不创建实例的情况下访问属性,请使用
静态
关键字
编辑:在您的示例中,您将替换
public string publicname { get; set; }
与
这允许您将字段读取为
string myNewname = informations.publicname;
并用
informations.publicname = "whatever";
当然,这意味着您的应用程序中只能有一个publicname实例——特别是在ASP.NET应用程序中,这可能不是您想要的 如果要访问已创建的对象,则需要在创建后存储对该对象的引用 看了您的样品后,我可以给您以下更改:
protected void GetValues()
{
// Access to the public variable town.
string myNewtown = publictown;
string myNewName = publicname;
// or
string myNewtown = myinfo.publictown;
string myNewName = myinfo.publicname;
}
protected void Setvalues()
{
publicname = "leo";
publictown = "london";
}
// we store reference to internal object
informations myinfo = new informations();
// and delegate property access to its properties.
public string publicname
{
get{ return informations.publicname;}
set{ informations.publicname = value; }
}
public string publictown
{
get{ return informations.publictown;}
set{ informations.publictown = value; }
}
private class informations
{
public string publicname { get; set; }
public string publictown { get; set; }
}
你能发一点你的代码并评论一下吗?很抱歉,我不明白您想要实现的目标。publicname和publictown是否应该是全局的(a)对于完整的应用程序,(b)对于当前会话,还是(c)对于您当前正在处理的一个ASP.NET请求?同样感谢您。。真不错!顺便问一下,这是最干净的方式吗?或者我可以把它发展成更多的clena:)?OO设计通常是关于将操作和数据移动到一起。因此,考虑当前使用“代码>公共名称< /代码>和<代码>公城< /代码>的移动逻辑到您的<代码>信息< /代码>类。当然,在不知道手头的任务的情况下,很难说得更多。我通常避免程序中的静态,因为我发现它们很快就会变成PITA(我在其他答案的注释中列出了问题)-而且它们对我来说不够面向对象=)。但是对于一个(非常)简单的程序来说,静态属性可能没有那么有害。在您的任务上下文中考虑一下:您的程序的不同部分是否需要不同的
publictown
和publicname
值?如果是,则表示静力学不适用。如果没有,你可以用它们,但要小心。太好了!你让我高兴。这是最干净的发展方式,不是吗?。。。。为什么这个“静态”不是属性的默认设置,它更有用..?标记为static
的属性和方法对于使用它们的所有对象都是通用的。因此,它们类似于全局变量,从可测试性、调试、多线程并行访问等角度来看,它们都是一个问题。它们需要谨慎使用。面向对象的整个要点是创建对象。使用“static”,可以避免创建对象,而是使用类似于“全局变量”的东西。我无法用500个字符的注释向您解释OO编程,所以我真的建议您在这个主题上获得一些web教程或好书,并从一点理论开始。谢谢,我愿意!。。。问题是没有时间看书。。。但我必须这么做。
protected void GetValues()
{
// Access to the public variable town.
string myNewtown = publictown;
string myNewName = publicname;
// or
string myNewtown = myinfo.publictown;
string myNewName = myinfo.publicname;
}
protected void Setvalues()
{
publicname = "leo";
publictown = "london";
}
// we store reference to internal object
informations myinfo = new informations();
// and delegate property access to its properties.
public string publicname
{
get{ return informations.publicname;}
set{ informations.publicname = value; }
}
public string publictown
{
get{ return informations.publictown;}
set{ informations.publictown = value; }
}
private class informations
{
public string publicname { get; set; }
public string publictown { get; set; }
}