📄 class1.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 + -