0

我正在创建一个ActiveX对象javascript,并在该对象上调用一个方法。这工作得很好。但是,如果我尝试访问一个propertyactiveX 控件(或从被调用的方法返回一个值),浏览器就会崩溃(消息:IE 已停止工作)。在详细信息部分,它说System.StackOverflowException没有被抓住。C#代码是:

interface IScreenshot{
   int data {get; set;}
}

 public class ScreenShot : UserControl, IScreenShot, IObjectSafety
    {
       public int data
        {
            get
            {
                return data;
            }
            set
            {
                data=13;
            }
        }
   }

访问它的js代码是:

<script type="text/javascript" language="JavaScript">
 var x = new ActiveXObject("Try1.ScreenShot");
 var value = x.data;
</script>

详细错误是:

Problem signature:
  Problem Event Name: CLR20r3
  Problem Signature 01: iexplore.exe
  Problem Signature 02: 9.0.8112.16448
  Problem Signature 03: 4fecf1b7
  Problem Signature 04: Try1
  Problem Signature 05: 1.0.0.0
  Problem Signature 06: 507399f0
  Problem Signature 07: 5
  Problem Signature 08: 0
  Problem Signature 09: System.StackOverflowException
  OS Version: 6.1.7601.2.1.0.768.11
  Locale ID: 1033
4

1 回答 1

3

看看这段代码:

 public int data
 {
    get
    {
        return data;
    }
}

为了返回数据,你……返回数据。砰。您需要有一个字段来存储该值。

您的二传手也忽略了传入的值,这显然很奇怪。

假设您的属性不需要任何逻辑,您可以使用自动实现的属性 - 理想情况下已更改名称以遵循 .NET 命名约定:

public int Data { get; set; }

(理想情况下,你会同时给它一个更有意义的名字......)

请注意,这与 Javascript 无关 - 您会在纯 C# 应用程序中看到与该属性实现相同的问题。

于 2012-10-08T10:27:41.073 回答