소스코드파일
예전에 올렸던 것에서는 mouse_event 만을 사용해서 만들었었는데이번에 만든 것은 그 외에 다른 API도 사용하여 만들었습니다
Dropbox 링크 : https://www.dropbox.com/s/jxhrjf3n0bkjf72/Mouse%28ver%202.0%29.cs?dl=0
using System;
using System.Linq;
using System.Reflection;
using System.Collections.Generic;
using System.Runtime.Serialization;
namespace CodeGenerater.Example
{
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
public sealed class SerializationTargetAttribute : Attribute
{
}
public static class SerializationHelper
{
public static void Serialize(object Instance, SerializationInfo Info)
{
foreach (dynamic each in GetTarget(Instance))
if (each is FieldInfo)
Info.AddValue(each.Name, each.GetValue(Instance), each.FieldType);
else if (each is PropertyInfo)
Info.AddValue(each.Name, each.GetValue(Instance), each.PropertyType);
}
public static void Deserialize(object Instance, SerializationInfo Info)
{
foreach (dynamic each in GetTarget(Instance))
if (each is FieldInfo)
each.SetValue(Instance, Info.GetValue(each.Name, each.FieldType));
else if (each is PropertyInfo)
each.SetValue(Instance, Info.GetValue(each.Name, each.PropertyType));
}
static IEnumerable<MemberInfo> GetTarget(object Instance)
{
return from q in Instance.GetType().GetMembers(BindingFlags.GetField | BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
where q.GetCustomAttribute<SerializationTargetAttribute>() != null
select q;
}
}
}
| cs |
public static void Serialize(object Instance, SerializationInfo Info)
{
foreach (var each in GetTarget(Instance))
if (each is FieldInfo)
{
FieldInfo F = each as FieldInfo;
Info.AddValue(F.Name, F.GetValue(Instance), F.FieldType);
}
else if (each is PropertyInfo)
{
PropertyInfo P = each as PropertyInfo;
Info.AddValue(P.Name, P.GetValue(Instance), P.PropertyType);
}
}
| cs |
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace CodeGenerater.Example
{
[Serializable]
class Program : ISerializable
{
#region Serializaion
public void GetObjectData(SerializationInfo Info, StreamingContext Context)
{
SerializationHelper.Serialize(this, Info);
}
Program(SerializationInfo Info, StreamingContext Conmtext)
{
SerializationHelper.Deserialize(this, Info);
}
#endregion
#region Constructor
public Program()
{
}
#endregion
#region Field
[SerializationTarget]
int PrivateField;
#endregion
#region Property
[SerializationTarget]
public int PublicProperty
{
set;
get;
}
[SerializationTarget]
public int HalfPublicProperty
{
private set;
get;
}
[SerializationTarget]
int PrivateProperty
{
set;
get;
}
#endregion
#region Method
static void Main(string[] args)
{
var T = new Program();
int R_PrivateProperty, R_HalfPublicProperty, R_PublicProperty, R_PrivateField;
#region Initialize
Random R = new Random();
T.PrivateProperty = R_PrivateProperty = R.Next();
T.HalfPublicProperty = R_HalfPublicProperty = R.Next();
T.PublicProperty = R_PublicProperty = R.Next();
T.PrivateField = R_PrivateField = R.Next();
#endregion
using (MemoryStream Stream = new MemoryStream())
{
#region Serialization
BinaryFormatter F = new BinaryFormatter();
F.Serialize(Stream, T);
#endregion
#region Init
T = null;
Stream.Position = 0;
#endregion
#region Deserialization
T = (Program)F.Deserialize(Stream);
#endregion
#region Check
bool TestSuccess =
T.PrivateProperty == R_PrivateProperty &&
T.HalfPublicProperty == R_HalfPublicProperty &&
T.PublicProperty == R_PublicProperty &&
T.PrivateField == R_PrivateField;
if (TestSuccess)
Console.WriteLine("Success");
else
Console.WriteLine("Fail");
#endregion
}
}
#endregion
}
}
| cs |