use delegate ctor reduce code