解決しました。

投稿者:onichan 投稿日:2024/04/26(Fri) 09:04:01 No.2373

お世話になっております。

内容について承知いたしました。
(キャスト構文ないと思ってたので個人的に嬉しいです)

ご確認いただきありがとうございます。
今後ともよろしくお願いいたします。

Re: C#のオーバーロードが正しくない事がある

投稿者:ゆうと 投稿日:2024/04/26(Fri) 03:12:00 No.2372

こんにちは、お世話になっております。

動作等を再現させて検討しましたが
string型とobject[]型のオーバロードの手順決定できない挙動については
仕様とさせてください。
(エラーとならずにどちらかが実行されてしまう挙動はバグです)

理由としては、
整数の配列を、C#の引数に渡す際に、string型でもobject[]型でも、値変換が必要となります。
このケースのように、助詞が一致する場合には、どちらの引数も値変換が必要な点は同じですので、どちら一方に決めることができません。

同じ配列ならobject[]型が選択されることを期待しますが、要素の型を整数からobject型に変換する必要があるため「変換が必要な手順呼び出し」と判断されます。

対策としてはC#側でint[]の値に対するオーバロードを定義するか、次のように「←」によるキャストを指定してください。この場合は正しく手順が決まります。

----
【A:整数の配列】={1,2,3,4,5,6}
(A←配列)の種類名を表示
----

参考にしてください。

C#のオーバーロードが正しくない事がある

投稿者:onichan 投稿日:2024/04/21(Sun) 22:52:48 No.2371

いつもお世話になっております。

object[]またはdynamic[]を引数に取るメソッドに、プロデルで型固定された配列を入れようとすると、期待通りのオーバーロードが選択されない事があるようです。

```プログラム例(cs)
using System.Linq;
using Produire;

namespace ClassLibrary1
{
public class Class1 : IProduireGlobalClass
{
[自分で]public object[] スライス([を] object[] 内容) => 内容.Take(5).ToArray(); //要素型を問わず配列はこちらのメソッドで受け付けたい
[自分で]public string スライス([を] string 内容) => 内容.Substring(0, 5);
}
}
```

```プログラム例(rdr)
「(省略)\ClassLibrary1.dll」を利用
{1,2,3,4,5,6}をスライスして表示 //{1,2,3,4,5}
「123456」をスライスして表示 //12345

【A:整数の配列】={1,2,3,4,5,6}
Aをスライスしたものの種類名を表示 //object[]側のメソッドが呼ばれてほしいがstring側が呼ばれる
```

状況:Pythonのスライサーを再現するメソッドを作っている際に発覚しました。

プロデルバージョン:1.9.1209〜1.9.1239
C#7.3 .NET Framework 4.8.9232.0 コンパイラ4.9.0-3.24121.1(a98c90d5)

よろしくお願いいたします。

結果に関しては変わることがあります

投稿者:ゆうと <yutopia あっとまーくutopiat.net> 投稿日:2024/04/14(Sun) 13:31:42 No.2370

こんにちは

「元実体」設定項目に関しては、プログラムを確認しておきます。
ただ、「元実体」設定項目の結果に関しては、おまけ機能という位置づけですので、バージョンアップ等で今後もかなり変える可能性があります。この結果に依存したプログラムの作成はできるだけ避けてください。
(限られた開発時間の中で、このような点に対応しているとメインの開発が進まなくなりますので)

そもそも「元実体」設定項目でどのようなことをしているのかも含めて教えてください。
場合によっては標準で対応したり、代替となる機能を用意したいと思います。

一部の項目にしかアクセスできませんでした

投稿者:Milkeyyy 投稿日:2024/04/13(Sat) 08:21:06 No.2369

こんにちは。
いつもお世話になっております。

修正を確認できたと返信してしまったのですが、完全には修正されていないことに気づいたので再度報告させていただきます。

「元実体」設定項目にアクセスすることはできるようになったのですが、元実体に含まれる設定項目が以前とは異なり、一部の項目にしかアクセスできなくなっていました。
バージョン 2.0.1216 までは、通常の設定項目には存在しない項目にもアクセスできていました。

検証用のプログラムも添付させていただきます。
よろしくお願い致します。

◆動作環境情報◆
プロデル 2.0.1235
Windows 11 Pro 64ビット
メモリ:31.9 GB

ーー検証用プログラム
メイン画面を表示する
待機する

メイン画面とは
  ウィンドウを継承する
  はじめの手順
    初期化する
    ーー貼り付けた部品に対する操作をここに書きます
  終わり
  初期化する手順
    ーー自動生成された手順です。ここに書き加えたプログラムは消える可能性があります
    初期化開始する
    この実質大きさを{284,339}に変える
    この内容を「メイン画面」に変える
    この文字色を「標準の文字」に変える
    チェックボックス1というチェックボックスを作る
      その位置と大きさを{13,287,104,24}に変える
      その内容を「チェックボックス1」に変える
      その移動順を6に変える
      その文字色を「標準の文字」に変える
    オプション1というオプションを作る
      その位置と大きさを{13,256,104,24}に変える
      その内容を「オプション1」に変える
      その移動順を5に変える
      そのフォーカス移動可能を○に変える
      その文字色を「標準の文字」に変える
    ラベル1というラベルを作る
      その位置と大きさを{13,98,100,23}に変える
      その内容を「ラベル1」に変える
      その移動順を4に変える
      その文字色を「標準の文字」に変える
    テキスト領域1というテキスト領域を作る
      その位置と大きさを{13,149,100,100}に変える
      その移動順を3に変える
    テキスト1というテキストを作る
      その位置と大きさを{13,124,100,19}に変える
      その移動順を1に変える
    ボタン1というボタンを作る
      その位置と大きさを{13,13,223,79}に変える
      その内容を「ボタン1」に変える
      その移動順を2に変える
      そのドラッグドロップを○に変える
      その文字色を「標準の文字」に変える
    初期化終了する
  終わり
  
  開いた時の手順
    自分の内容=プロデルのバージョン
    自分の子部品一覧を【子部品】へそれぞれ繰り返す
      子部品の種類名&「: 」&(子部品の元実体が無でない)を報告する
      「- [[子部品の元実体]から型情報を取得したものから設定項目一覧を取得したものすべての名前]」を報告する
    繰り返し終わり
  終わり
終わり

Re: 修正しました

投稿者:Milkeyyy 投稿日:2024/04/13(Sat) 07:52:38 No.2368

こんにちは。
2.0.1235 で修正確認できました。

迅速な対応ありがとうございました。

修正しました

投稿者:ゆうと <yutopia あっとまーくutopiat.net> 投稿日:2024/04/13(Sat) 00:50:53 No.2367

こんにちは、ゆうとです。
いつもお世話になっております。

> 「ラベル」や「ボタン」などの部品では「元実体」プロパティにアクセスできるのですが、
> 「テキスト」と「テキスト領域」の「元実体」プロパティにアクセスすると「無」となり、アクセスできません。

検証用プログラムとても助かります。
状況を再現でき、内部仕様の変更が原因と判明しました。
最新版2.0.1235/1.9.1235で修正済みですのでご確認ください。

ご指摘ありがとうございます。

テキスト部品の元実体にアクセスできない

投稿者:Milkeyyy 投稿日:2024/04/06(Sat) 10:30:21 No.2365

お世話になっております。

「ラベル」や「ボタン」などの部品では「元実体」プロパティにアクセスできるのですが、
「テキスト」と「テキスト領域」の「元実体」プロパティにアクセスすると「無」となり、アクセスできません。

バージョン 2.0.1216 までは問題なくアクセスできたのですが、バージョン 2.0.1218 からこの現象が発生するようになったようです。

よろしくお願い致します。

◆動作環境情報◆
プロデル 2.0.1234
Windows 11 Pro 64ビット
メモリ:31.9 GB


ーーサンプルプログラム

メイン画面を表示する
待機する

メイン画面とは
  ウィンドウを継承する
  はじめの手順
    初期化する
    ーー貼り付けた部品に対する操作をここに書きます
  終わり
  初期化する手順
    ーー自動生成された手順です。ここに書き加えたプログラムは消える可能性があります
    初期化開始する
    この実質大きさを{284,339}に変える
    この内容を「メイン画面」に変える
    この文字色を「標準の文字」に変える
    チェックボックス1というチェックボックスを作る
      その位置と大きさを{13,287,104,24}に変える
      その内容を「チェックボックス1」に変える
      その移動順を6に変える
      その文字色を「標準の文字」に変える
    オプション1というオプションを作る
      その位置と大きさを{13,256,104,24}に変える
      その内容を「オプション1」に変える
      その移動順を5に変える
      そのフォーカス移動可能を○に変える
      その文字色を「標準の文字」に変える
    ラベル1というラベルを作る
      その位置と大きさを{13,98,100,23}に変える
      その内容を「ラベル1」に変える
      その移動順を4に変える
      その文字色を「標準の文字」に変える
    テキスト領域1というテキスト領域を作る
      その位置と大きさを{13,149,100,100}に変える
      その移動順を3に変える
    テキスト1というテキストを作る
      その位置と大きさを{13,124,100,19}に変える
      その移動順を1に変える
    ボタン1というボタンを作る
      その位置と大きさを{13,13,223,79}に変える
      その内容を「ボタン1」に変える
      その移動順を2に変える
      そのドラッグドロップを○に変える
      その文字色を「標準の文字」に変える
    初期化終了する
  終わり
  
  開いた時の手順
    自分の内容=プロデルのバージョン
    自分の子部品一覧を【子部品】へそれぞれ繰り返す
      子部品の種類名&「: 」&(子部品の元実体が無でない)を報告する
    繰り返し終わり
  終わり
終わり

反映を確認しました

投稿者:アーク 投稿日:2024/04/03(Wed) 21:16:39 No.2364

お世話になっております。アークです。

最新版にて正常に色分けされて実行も可能な事を確認しました。
他の1万行を超えるプログラムでも問題なく実行可能になりました。
対応ありがとうございました。

長文コーディングで気を付けるべき事など有りますでしょうか。
こちらでもより安全な方法を採りたいと考えております。

実行ファイルにできました

投稿者:アーク 投稿日:2024/04/03(Wed) 21:06:50 No.2363

お世話になっております。アークです。

最新版にて32bit版で実行ファイルにできる事を確認しました。
ありがとうございました。

▲ページの先頭へ

- WebForum -