1

Microsoft Exchange Webサービス(EWS)マネージAPI 1.2を使用して、C3を使用してExchangeメールボックスのデータにアクセスしています。返されたオブジェクトの一部のプロパティは、カスタムプロパティであるため、アクセスが困難です。

これらのプロパティへのアクセスを簡素化するために、(一例として)EWSが提供するContactクラスを拡張するContact2というクラスを作成しました。

Contactオブジェクトを返す関数を呼び出す場合、どうすればそれをContact2に「アップグレード」できますか?

これが私が書いたContact2クラスです:

namespace ExchangeContacts
{
    class Contact2 : Microsoft.Exchange.WebServices.Data.Contact
    {

        public ExchangeService ex = new ExchangeService();
        public Dictionary<string, ExtendedPropertyDefinition> propDefs = new Dictionary<string, ExtendedPropertyDefinition>();
        public PropertySet myPropSet = new PropertySet();

        public Contact2(ExchangeService service)
            : base(service)
        {
            propDefs.Add("MarketingGuid", new ExtendedPropertyDefinition(new Guid("3694fe54-daf0-49bf-9e37-734cfb8521e1"), "MarketingGuid", MapiPropertyType.String));
            myPropSet = new PropertySet(BasePropertySet.FirstClassProperties) { propDefs["MarketingGuid"] };
            ex = service;
        }

        new public void Load()
        {
            base.Load(myPropSet);
        }

        new public void Load(PropertySet propertySet)
        {
            propertySet.Add(propDefs["MarketingGuid"]);
            base.Load(propertySet);
        }

        public string MarketingGuid
        {
            get
            {
                string g;
                if (TryGetProperty(propDefs["MarketingGuid"], out g))
                    return g;
                else
                    return "";
            }
            set
            {
                SetExtendedProperty(propDefs["MarketingGuid"], value);
            }
        }

    }
}
4

3 に答える 3

3

Contact2 で、Contact オブジェクトを受け入れる明示的な静的メソッドまたはコンストラクターを定義する必要があります。すなわち

public static Contact2 FromContact(Contact cnt)
{
    return new Contact2(cnt.x, cnt.y, ...)
}

本当にしたい場合は、暗黙的または明示的な変換を定義できます。これは混乱を招く可能性があるため、一般的にはお勧めできません。そのため、これを行う前に、明示的および暗黙的な変換についてよく読んでください。それがどのように行われたかは教えません:P

于 2012-05-30T16:02:29.667 に答える
1

Contact他のクラスが を継承している場合でも、既存のインスタンスを別のクラスに魔法のように変換することはできませんContact

を作成するコードを変更して代わりに を作成するか、既存のインスタンスをラップする を作成する独自の関数を作成するContact必要があります。Contact2Contact2Contact

于 2012-05-30T16:02:52.493 に答える
0

Contact の演算子のオーバーロードを追加すると、静的メソッドが不要になるか、少なくとも公開する必要がなくなります。

これを正確に理解するのは少し難しいです...「基本クラスの == 演算子をオーバーライドするにはどうすればよいですか?」を参照してください。

于 2012-05-30T16:04:41.587 に答える