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

📄 class1.cs

📁 C#开发教程 由浅入深 配有实例 是初学者的好帮手
💻 CS
字号:
using System;
using System.Runtime.Remoting.Contexts;
using System.Runtime.Remoting.Messaging;	// for IMessageSink
using System.Runtime.Remoting.Activation;	// for IConstructionCallMessage
using System.Threading;

namespace ContextAttribs
{
	public class FooObjectSink : IMessageSink
	{
		private IMessageSink next;
		public FooObjectSink (IMessageSink ims) { next = ims; }
		public IMessage SyncProcessMessage (IMessage imCall)
		{
			Console.WriteLine("\nPreprocessing...");
			IMessage imReturn = next.SyncProcessMessage(imCall);
			Console.WriteLine("...Postprocessing\n");
			return imReturn;
		}
		public IMessageCtrl AsyncProcessMessage (
			IMessage imCall, IMessageSink ims) { return null; }
		public IMessageSink NextSink { get { return next; } }
	}

	public class FooProperty : 
		IContextProperty, IContributeObjectSink
	{
		public IMessageSink GetObjectSink(
			MarshalByRefObject o, IMessageSink next)
		{
			return new FooObjectSink(next);
		}
		public bool IsNewContextOK(Context c) { return true; }
		public void Freeze(Context c) { return; }
		public string Name { get { return "Foo"; } }
	}

	[AttributeUsage(AttributeTargets.All)]
	public class FooAttribute : ContextAttribute
	{
		public FooAttribute() : base("Foo") 
		{
			Console.WriteLine("FooAttribute instance ctor");
		}
		static FooAttribute()
		{
			count = 1;
			Console.WriteLine("FooAttribute static ctor");
		}
		public static int Count
		{
			get { return count++; }
		}
		private static int count;

		public override bool IsContextOK(Context c, 
			IConstructionCallMessage ctor)
		{
//			return true;
			return false;
		}
		public override void GetPropertiesForNewContext(
			IConstructionCallMessage ctor)
		{
			ctor.ContextProperties.Add(new FooProperty());
		}
	}

	[Foo]
	public class SomeClass : ContextBoundObject
	{
		public string name;
		public SomeClass(string s)
		{
			name = s;
			Console.WriteLine("{0} created", name);
		}
		public void SomeFunc()
		{
			Console.WriteLine("{0}, SomeFunc: {1}", 
				name, FooAttribute.Count);
		}
	}

	class Test1
	{
		[STAThread]
		static void Main(string[] args)
		{
			SomeClass sc = new SomeClass("Bill");
			sc.SomeFunc();

			SomeClass sc2 = new SomeClass("Mary");
			sc2.SomeFunc();

			sc.SomeFunc();
		}
	}
}

⌨️ 快捷键说明

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