我想我不能做这件事,但我试着问(也许:))。
假设我有这个Main类:
public class UiUtils
{
public static MyObject myObject;
public UiUtils()
{
myObject=new MyObject();
}
}
现在,如果我想尝试从另一个Context Class(Web应用程序)调用此实例,我会这样做:
public partial class context_eventi_CustomClass : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
Console.Write(UiUtils.myObject.Title());
}
}
但我想做的是:
public partial class context_eventi_CustomClass : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
Console.Write(myObject.Title());
}
}
所以,直接使用myObject而不是UiUtils.myObject:)
我认为这是不可能的,但也许我错了,有任何策略:)谢谢
**编辑**
我的解决方案:
public class UiUtils
{
public static MyObject myObject;
public UiUtils()
{
myObject=new MyObject();
iContext.myObject = myObject;
}
}
public class iContext : System.Web.UI.UserControl
{
public static MyObject myObject;
public iContext()
{
}
public iContext(MyObject myObject)
{
myObject = myObject;
}
}
public partial class context_eventi_CustomClass : iContext
{
protected void Page_Load(object sender, EventArgs e)
{
Console.Write(myObject.Title());
}
}
似乎有效!你怎么看?
答案 0 :(得分:2)
每MSDN,
静态方法,字段,属性或 event甚至可以在类上调用 没有班级的实例 创建。 如果该类的任何实例 是创造的,他们不能习惯 访问静态成员。只有一个 静态字段和事件的副本 存在,静态方法和 属性只能访问静态 字段和静态事件。静态的 成员经常被用来代表 没有的数据或计算 改变对象状态。
和
“要访问静态类成员,请使用类的名称而不是变量名来指定成员的位置。”
和
始终访问静态成员 通过类名,而不是 实例名称
......静态成员无法集成 很好的继承。它没有 感觉让他们可以遗传。所以我 将静态内容保存在单独的静态中 类...
所以我不清楚你的设计为什么MyObject需要是静态的。你想要保存的只是一点点打字,但继承对你来说也无济于事。
编辑:
我尝试在简单的控制台应用程序中复制您的代码。输出不是您所期望的:
namespace ConsoleApplication1
{
public class UiUtils
{
public static int myObject = 1;
public UiUtils()
{
myObject = new int();
iContext.myObject = myObject;
Console.WriteLine("This is UiUtils\n");
}
}
public class iContext
{
public static int myObject = 2;
public iContext()
{
Console.WriteLine("This is iContext\n");
}
public iContext(int myObject)
{
myObject = myObject;
}
}
public class iContext2 : iContext
{
public static int myObject = 3;
public iContext2()
{
Console.WriteLine(myObject.ToString() + "\nThis is iContext2\n");
Console.WriteLine(iContext.myObject.ToString());
}
}
class Program
{
static void Main(string[] args)
{
iContext2 icontext = new iContext2();
Console.In.ReadLine();
}
}
}
输出最终是这样的:
This is iContext
3
This is iContext2
如果添加对iContext.myObject的调用,则输出它的编号:
This is iContext
3
This is iContext2
2
答案 1 :(得分:1)
要在不键入类的情况下访问对象,可以使用继承。
public class CustomClass : UiUtils
这将与CustomClass
共享UiUtils属性