我有一段时间从我的Game1(主)类中可用的另一个类的函数中获取变量。具体来说,我想从SetWindowSize.cs中的SaveData函数中获取宽度和高度,并在Game1.cs中的ReadSettings中使用它。
我收到错误
'ShovelShovel.SetWindowSize'不包含。的定义 '高度'。 “宽度”相同。
Game1.cs(仅限该功能)
protected void ReadSettings()
{
try
{
if (File.Exists(SetWindowSize.savePath))
{
using (FileStream fileStream = new FileStream(SetWindowSize.savePath,
FileMode.Open))
{
using (BinaryReader binaryReader = new BinaryReader(fileStream))
{
SetWindowSize.width = binaryReader.ReadInt32();
SetWindowSize.height = binaryReader.ReadInt32();
}
}
}
}
catch
{
}
}
SetWindowSize.cs
namespace ShovelShovel
{
protected void ReadSettings()
{
try
{
if (File.Exists(savePath))
{
using (FileStream fileStream = new FileStream(savePath, FileMode.Open))
{
using (BinaryReader binaryReader = new BinaryReader(fileStream))
{
var windowSize = WindowSizeStorage.ReadSettings();
WindowSize.Width = windowSize.Width;
WindowSize.Height = windowSize.Height;
}
}
}
}
catch
{
}
}
非常感谢能够帮助我的每个人,我真的很感激。
答案 0 :(得分:1)
这可能会起到作用:
public class WindowSize
{
public int Width { get; set; }
public int Height { get; set; }
}
public static class WindowSizeStorage
{
public static string savePath = "WindowSize.dat";
public static WindowSize ReadSettings()
{
var result = new WindowSize();
using (FileStream fileStream = new FileStream(SetWindowSize.savePath, FileMode.Open))
{
using (BinaryReader binaryReader = new BinaryReader(fileStream))
{
result.Width = binaryReader.ReadInt32();
result.Height = binaryReader.ReadInt32();
}
}
return result;
}
public static void WriteSettings(WindowSize toSave)
{
using (BinaryWriter binaryWriter = new BinaryWriter(File.Open(savePath, FileMode.Create)))
{
binaryWriter.Write(toSave.Width);
binaryWriter.Write(toSave.Height);
}
}
}
用法:
// Read
var windowSize = WindowSizeStorage.ReadSettings();
myForm.Width = windowSize.Width;
myForm.Height = windowSize.Height;
// Write
var windowSize = new WindowSize { Width = myForm.Width, Height = myForm.Height };
WindowSizeStorage.WriteSettings(windowSize);
请注意,写这样的答案(提供所有代码)并不常见;我只是觉得这样。我试图展示一些面向对象的设计原则,每个类都有自己的东西。
如果要在方法之间传输复杂对象(即多个基本类型),通常会创建像WindowSize
这样的数据传输对象(DTO)。
WindowSizeStorage
类完全负责存储和检索此类WindowSize
对象。从您的代码中,您只需告诉存储器存储或检索您想要的设置。
但是当我从您的问题和评论中得到答案时,您在使用C#或者根本没有任何编程经验方面没有太多经验。尝试学习一两个教程,这样你就可以理解如何将你的想法付诸代码。
答案 1 :(得分:0)
您无法在该功能之外访问Function变量。 要实现这些定义静态变量,请为静态变量分配高度和宽度,然后在任意位置访问它。
答案 2 :(得分:0)
函数的目的不是存储和公开变量。如果范围不够宽,则无法访问变量。在您的情况下,您应该通过将它们存储在类中并将它们公开来以某种方式公开它们,例如:
class SetWindowSize
{
public const string savePath = "file.dat";
public int width {get; set; }
public int height {get; set; }
public static void SaveData(string width, string height)
{
using (BinaryWriter binaryWriter = new BinaryWriter(File.Open(savePath, FileMode.Create)))
{
binaryWriter.Write(width);
binaryWriter.Write(height);
SetWindowSize.width = width;
SetWindowSize.height = height;
}
}
}
}
这远非最佳,但它确实有效。
答案 3 :(得分:0)
您的SetWindowSize类不包含width或height成员。您可以将它们添加为属性:
public class SetWindowSize
{
// other stuff
public int Height {get;set;}
public int Width {get;set;}
// other stuff
}
然后您可以使用SetWindowSize实例访问它们:
SetWindowSize sws = new SetWindowSize();
sws.Height = 512;
sws.Width = 512;