0

我有一个 .NET COM 对象,用于从 C 代码调用。

[EventTrackingEnabled(true)]
[ComVisible(true)]
public class ComObject : IComObject
{
    private static XslCompiledTransform transformer = null;
    private static string transformerXsltPath = null;
    private static string TransformerXsltPath 
    {
        get
        {
            return transformerXsltPath;
        }
        set
        {
            transformerXsltPath = value;
        }
    }
    private static XslCompiledTransform Transformer
    {
        get
        {
            return transformer;
        }
        set
        {                
            transformer = value;                
        }
    }

    [ComVisible(true)]
    public bool TransformXML(String inputPath, String xsltPath, String outputPath)
    {       
        // ....
        if (Transformer == null || xsltPath != TransformerXsltPath)
        {
            Transformer = new XslCompiledTransform(true);
            Transformer.Load(xsltPath, new XsltSettings(true, true), new XmlUrlResolver());
        }
        // ...
    }
}

我想保持 com 对象的状态,只要我调用这个方法。由静态成员。所以当我再次调用它时,状态成员将被初始化。

但问题是,只有Transformer对象在第二次调用中保持初始化,但transformerXsltPath字符串重新启动为 null。

怎么可能?

4

1 回答 1

0

首先,为了在方法调用之间保留其值,字段不需要是静态的(只有在方法内部声明的变量才具有该属性)。静态是指该字段属于该类,不属于该类的任何实例,并且该字段只有一个实例,该字段由该类的所有实例共享(甚至可以在不创建该类的实例的情况下访问,如Class.field)。有关详细信息,请参阅字段静态字段

其次,当您不在任何地方修改它时,我看不到您期望如何修改transformerXsltPath 字段(它是私有的,这意味着它不能在类之外修改)。

于 2013-02-28T16:06:06.977 回答