【问题标题】:Is it possible to refernece a class withing the same class? How?是否可以在同一个类中引用一个类?如何?
【发布时间】:2014-11-19 14:42:16
【问题描述】:

是否可以在同一个类中引用一个类...我的意思是在下面的代码中,我必须从保存的文件中获取属性值,这就是我想要返回的内容。

public class MyClass
{
    private string attr1 = "atrribute 1";   
    public string Attr1
    {
        get
        {
            //In the line below, I have to reference the type of the class "MyClass"

            if (MyFileStorage.ReadSharedData<MyClass>("filename.xml").prop1.Equals(String.Empty))
               return attr1;
            else
               return MyFileStorage.ReadSharedData<MyClass>("filename.xml").prop1;
        }
        set
        {
            MyFileStorage.WriteSharedData("filename.xml", value);
        }
    }

    private string attr2 = "atrribute 2";
    public string Attr2
    {
        get
        {
            return attr2
        }
        set
        {
            attr2 = value;
        }
    }
}

用法

public static MyClass myClass;
Debug.WriteLine(myClass.Attr1); //output: attribute 1
myClass.Attr1 = "xyz";
Debug.WriteLine(myClass.Attr1); //output: xyz (should be able to read this value from the Storage file)

但是,有一个未知错误。不可以,应用卡住了!

谁能告诉我如何从存储文件(实现了 MUTEX)中读取属性值,它是两个项目之间的共享文件并返回。

ReadSharedData 实现:stackoverflow.com/questions/21596564/

【问题讨论】:

  • 你的意思是“这个”吗? more Info
  • 未知错误到底是什么意思?
  • 能否展示 MyFileStorage.ReadSharedData 的相关部分?
  • 比较常见的问题是从内部类引用外部类..
  • 附带说明,使用 getter 和 setter 读取/写入文件可能不是一个好的设计。更好的设计是将整个类加载到文件中并在某个时候保存。

标签: c# class oop


【解决方案1】:

是的,这在物理上是可能的 - 尽管我不建议您尝试这样做。
要么将attr1 设为静态,以便它们共享相同的变量:

private static string attr1 = "atrribute 1";
或者总是返回文件,无论是否设置了attr1
get  {  return MyFileStorage.ReadSharedData&lt;MyClass&gt;("filename.xml").prop1; }
请记住,以上都不是好的做法。

【讨论】:

  • OP 不需要将attr1 设为静态 - 他正在调用myClass.Attr1 - 即,他正在访问实例属性。我相信 OP - 尽管他的问题措辞 - 正在询问 this 运营商。
  • @DP:似乎wafers在开头的段落中自相矛盾,所以我猜想自我参照并不是他真正想要的。他似乎在询问(尽管没有明确地)关于在这个类的所有实例之间共享的静态 getter。但我可能错了。
  • 他的例子明确说明了其他情况
  • 你是对的。他明确要求“this”引用。然后他继续详细说明他的问题是什么意思,可以有不同的解释。
  • @z0mbi3 感谢您的回答。该解决方案部分有效。有一个问题,当我试图获得它的价值时,该属性会递归地调用它自己。所以我确实设置了我正在写作和阅读的类的另一个静态实例。我也会把我的解决方案放在这里
猜你喜欢
  • 2017-09-10
  • 1970-01-01
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多