作为一名新手 - 中级C#程序员,我的调试问题围绕着C#程序设计的最基本元素。我的项目是一个基于网络的计算机化交易系统。使用(2)API,1用于定价,另一个用于Orders我的问题似乎是代码设计和与多个会话相关的问题。
我尝试将代理用于所有事件。
我目前关于Windows窗体和对象的问题
这是实例化类对象的正确方法(或“正确方法”)吗?使用aspx页面的事件代理? (我的例子经常让人感到困惑,而不是帮助,我知道)。
public partial class admin_Admin : System.Web.UI.Page
{
private static Downloader dl = null;
private SendOrderDelegate sendError;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
if (dl == null)
{
Main();
}
}
}
protected static void Main()
{
dl = new Downloader();
sendOrder = new Steury.Trading.SendOrderDelegate(dl.Order);
}
}
何时以及如何使用Main()方法?在具有多个程序(定价,订单,BackTesting,优化)的复杂Web应用程序中使用Main()的定义是什么,所有程序都同时运行并使用不同的aspx页面?
我是否为每个aspx页面使用Main(),并为每个主类程序使用... Orders.cs,OrderShort.cs,BacktTest.cs,BackTestShort.cs,Optimize.cs,OptimizeShort.cs或对于登录到定价和订单服务器的2个aspx页面,我是否只使用Main Only,然后维护连接到正确类的静态会话变量?
正如您所知,我正在努力解决这些问题,并且没有找到一个针对非常复杂的场景详细介绍的资源。大多数(如果不是全部)使用非常简单的类示例..我发现这有用 Core C#和.NET http://flylib.com/books/en/4.253.1.1/1/。
任何其他建议都会有用,包括建设性的批评。
答案 0 :(得分:2)
何时以及如何使用Main()方法?
你没有。去掉它。主要功能(您希望在第一次运行整个网站时运行的代码,即应用程序),或者当某个用户第一次访问它时,即会话)被移动到global.asax。默认情况下,此文件在您的Web应用程序项目中不,但您可以添加它。
这是实例化类对象的正确方法(或“正确方法”)吗?事件代表
不,不是。虽然IsPostBack
检查是好的(这意味着该页面是否已由用户发布,即他是否点击了您网页上的提交按钮,发回到同一页)。这里错的是静态主函数。将每个页面视为一个类(它确实是一个类),并且系统会为您实例化该类。启动的地方是Page_Init
。但是很多人都把它简单化,并把它放在Page_Load
中。加载页面时,ASP.NET系统会自动调用这些特殊方法。
关于何时使用静态关键字有什么好的建议吗?
这不容易回答。通常,在网页中,您几乎不会使用静态关键字,因为很多人和用户同时访问您的网页。但是,实用程序类和方法有时可能是静态的。它与普通的Windows应用程序完全不同,后者通常在受保护的环境中运行。
并且还没有找到针对非常复杂的场景详细介绍的资源
有很多关于ASP.NET的好书。有些人进入非常复杂的场景。但考虑到你所处的当前阶段,我建议你坚持开始时的简单场景。
答案 1 :(得分:2)
您正在尝试将Windows窗体技术应用于网页。那不行。特别是,你的主要功能不仅在这里毫无意义,而且还有害。通过使Main静态,这意味着它不能访问页面的任何成员实例数据或属性,除非它们也是静态的。
为什么你甚至想把它标记为静态?你的理由是什么?因为它在Windows窗体应用程序中是静态的吗?
仅当这些方法不执行任何状态更改功能时,通常才使用静态方法。了解常用静态方法的一个好方法是查看常见.NET类的文档,比如字符串,并查看它们定义为静态的函数。
要记住的网页的事情是它们是基于需求的,而且它们是无国籍的。在Windows窗体或控制台应用程序中,您“运行”该程序并保持运行直到您退出。 Web应用程序仅存在于单个请求的上下文中,尽管会话在请求之间提供了一些连续性。
所以重点是,每个会话都是它自己的宇宙。每次请求页面时,它都会启动,停止和结束。您只有会话数据可以将单独的请求绑定在一起。
对于多个用户...所有网络应用都是多用户。这就是网络环境的设计。两个或两个以上的人可以同时访问网页,你无法阻止它。