Программный эквивалент по умолчанию (Тип)

Spring AOP framework основан на «прокси» и здесь очень хорошо объясняется: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/aop. html # aop-understanding-aop-proxies

Когда Spring создает компонент, который настроен на аспект (например, «ABC» в вашем примере), он фактически создает объект «прокси», который действует как настоящий боб. Прокси просто делегирует вызовы «реальному» объекту, но, создав это косвенное действие, прокси получает возможность реализовать «совет». Например, ваш совет может регистрировать сообщение для каждого вызова метода. В этой схеме, если метод в реальном объекте («метод1») вызывает другие методы в одном и том же объекте (скажем, метод2), эти вызовы происходят без прокси на картинке, поэтому нет никаких шансов для реализации каких-либо советов.

В вашем примере, когда вызывается метод1 (), прокси получит возможность делать то, что он должен делать, но если метод1 () вызывает метод2 (), на картинке нет никакого аспекта , Как бы то ни было, если метод2 вызывается из какого-либо другого компонента, прокси сможет выполнить совет.

Надеюсь, это поможет.

Спасибо, Рагу

484
задан Pierre Arnaud 3 September 2015 в 06:37
поделиться

3 ответа

  • В случае значения вводят использование Активатор. CreateInstance и это должны хорошо работать.
  • При использовании ссылочного типа просто возвращают пустой указатель
public static object GetDefault(Type type)
{
   if(type.IsValueType)
   {
      return Activator.CreateInstance(type);
   }
   return null;
}

В более новой версии .NET, такого как стандарт .NET, type.IsValueType потребности, которые будут записаны как type.GetTypeInfo().IsValueType

662
ответ дан Neville Nazerane 3 September 2015 в 16:37
поделиться

Ничто просто еще не может найти простым и изящным, но у меня есть одна идея: Если Вы знаете тип свойства, Вы хотите установить, можно записать собственное default(T). Существует два случая - T, тип значения, и T ссылочный тип. Вы видите это путем проверки T.IsValueType. Если T ссылочный тип, то можно просто установить его на null. Если T будет тип значения, то он будет иметь конструктора без параметров по умолчанию, которого можно вызвать для получения "пустого" значения.

3
ответ дан Vilx- 3 September 2015 в 06:37
поделиться
  • 1
    Нет абсолютно ничего неправильно с HTML-таблицами - для рендеринга табличных данных. Если бы Вы знали то, что Вы делали, Вы могли создать ТАК с расположением CSS столь же быстро, работающий над всеми главными браузерами, и вероятно с меньшим местом (и не нуждаясь display:table или it' s обходные решения) – CJM 13 January 2009 в 16:36

Я делаю ту же задачу как это.

//in MessageHeader 
   private void SetValuesDefault()
   {
        MessageHeader header = this;             
        Framework.ObjectPropertyHelper.SetPropertiesToDefault<MessageHeader>(this);
   }

//in ObjectPropertyHelper
   public static void SetPropertiesToDefault<T>(T obj) 
   {
            Type objectType = typeof(T);

            System.Reflection.PropertyInfo [] props = objectType.GetProperties();

            foreach (System.Reflection.PropertyInfo property in props)
            {
                if (property.CanWrite)
                {
                    string propertyName = property.Name;
                    Type propertyType = property.PropertyType;

                    object value = TypeHelper.DefaultForType(propertyType);
                    property.SetValue(obj, value, null);
                }
            }
    }

//in TypeHelper
    public static object DefaultForType(Type targetType)
    {
        return targetType.IsValueType ? Activator.CreateInstance(targetType) : null;
    }
3
ответ дан kpollock 3 September 2015 в 06:37
поделиться
  • 1
    IE6 действительно однако поддерживает display:inline-блок, который мог легко заменить половину таблиц здесь без неаккуратных обходных решений. –  15 January 2009 в 19:06
Другие вопросы по тегам:

Похожие вопросы: