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 に答える