⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 propertyvariable.cs

📁 SharpDevelop2.0.0 c#开发免费工具
💻 CS
字号:
// <file>
//     <copyright see="prj:///doc/copyright.txt"/>
//     <license see="prj:///doc/license.txt"/>
//     <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
//     <version>$Revision: 1407 $</version>
// </file>

using System;

using Debugger.Wrappers.CorDebug;

namespace Debugger 
{
	/// <summary>
	/// Delegate that is used to get eval. This delegate may be called at any time and may return null.
	/// </summary>
	public delegate Eval EvalCreator();
	
	public class PropertyVariable: ClassVariable
	{
		EvalCreator evalCreator;
		Eval cachedEval;
		
		internal PropertyVariable(NDebugger debugger, string name, bool isStatic, bool isPublic, EvalCreator evalCreator):base(debugger, name, isStatic, isPublic, null)
		{
			this.evalCreator = evalCreator;
			this.valueGetter = delegate { return GetValueOfResult(); };
		}
		
		Value GetValueOfResult()
		{
			if (Eval != null) {
				return Eval.Result;
			} else {
				return new UnavailableValue(debugger, "Property unavailable");
			}
		}
		
		bool IsEvaluated {
			get {
				if (Eval != null) {
					return Eval.Evaluated;
				} else {
					return true;
				}
			}
		}
		
		Eval Eval {
			get {
				if (cachedEval == null || cachedEval.HasExpired) {
					cachedEval = evalCreator();
					if (cachedEval != null) {
						cachedEval.EvalStarted += delegate { OnValueChanged(); };
						cachedEval.EvalComplete += delegate { OnValueChanged(); };
					}
				}
				return cachedEval;
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -