Я не уверен насчет изменения поведения ваших аксессоров. Это звучит не так просто. Как насчет добавления обрезки в ваш базовый класс?
class CoreTransaction
{
public void Trim()
{
IEnumerable<PropertyInfo> stringProperties =
this.GetType().GetProperties()
.Where(p => p.PropertyType == typeof(string) && p.CanRead && p.CanWrite);
foreach (PropertyInfo property in stringProperties)
{
string value = (string)property.GetValue(this, null);
value = value.Trim();
property.SetValue(this, value, null);
}
}
}
(Также обратите внимание на проверку того, что ваши поля могут быть как прочитаны, так и записаны.)
РЕДАКТИРОВАТЬ: Затем вы можете добавить что-то вроде этого в свой базовый класс, и обрезать их все за один раз.
Класс WeakReference позволит вам легко отслеживать ваши экземпляры, не мешая сборщику мусора:
class CoreTransaction
{
private static List<WeakReference> allCoreTransactions = new List<WeakReference>();
public CoreTransaction()
{
allCoreTransactions.Add(new WeakReference(this));
}
public static void TrimAll()
{
foreach (WeakReference reference in allCoreTransactions)
{
if (reference.IsAlive)
{
((CoreTransaction)reference.Target).Trim();
}
}
}
}