- ふらっと C#,C♯,C#(初心者用) Part113
864 :名無しさん@そうだ選挙に行こう[sage]:2014/12/14(日) 19:24:29.97 ID:uwJwvBsv - class TEST_CLASS{
//省略 } class USECLASS{ public TEST_CLASS[] tc1 = new TEST_CLASS[3]; } こんな感じでメソッド外に書くことが出来ますが これはTEST_CLASS3個分の参照テーブルを作った、 という処理なんでしょうか? この場合、USECLASSを破棄したい場合はC++でいう deleteが tc1 についても必要なのでしょうか?
|
- ふらっと C#,C♯,C#(初心者用) Part113
867 :名無しさん@そうだ選挙に行こう[sage]:2014/12/14(日) 19:36:10.74 ID:uwJwvBsv - >>865
nullを入れればGCの対象になってそのうち消える、てのはなんとなく知ってるのですが メソッド外なのでクラスごと消せば消えてくれるのかな?と思った次第。 C++とかのクラス内に持ったクラスが自動でデストラクトが通ってたのでそういう風な…
|
- ふらっと C#,C♯,C#(初心者用) Part113
869 :名無しさん@そうだ選挙に行こう[sage]:2014/12/14(日) 19:47:23.14 ID:uwJwvBsv - 聞きたいことを答えてもらえる感じじゃないようなので取り下げます
ありがとうございました
|
- ふらっと C#,C♯,C#(初心者用) Part113
872 :デフォルトの名無しさん[sage]:2014/12/14(日) 20:33:16.45 ID:uwJwvBsv - >>871
> その通り。 > ただしTEST_CLASSの実体はまだ作成されていないことに注意。 そういう挙動かと思い、 tc1[0]=null ・・・ tc1[4]=null となるのを期待していたのですが tc1=nullのままでした。 クラスではなく int で試した場合は期待通り配列化していたので 参照型と値型で挙動が違うのかな?と思い調べています。 > IDisposableを実装しない場合は何もすることが無く、 > ガベージコレクションに解放をまかせるだけ。 IDisposableも調べてみます。 環境はUnity4.6+VSでやっているのでそっちの問題…てのはないですよねさすがに ありがとうございました。
|
- ふらっと C#,C♯,C#(初心者用) Part113
873 :デフォルトの名無しさん[sage]:2014/12/14(日) 20:49:17.01 ID:uwJwvBsv - しつこくて申し訳ないですが続報
public TEST_CLASS[] tc1 = new TEST_CLASS[3]; これを private TEST_CLASS[] tc1 = new TEST_CLASS[3]; public宣言をやめたら期待通りの挙動になりました。 理由は別途調べますが、とりあえずはprivateにしてゲッターなど利用するような コードで実装していこうと思います。 そんで、言語仕様についての理解を深める必要が相当あるようなので 改めて勉強することにします。 ありがとうございました
|
- ふらっと C#,C♯,C#(初心者用) Part113
877 :デフォルトの名無しさん[sage]:2014/12/14(日) 20:58:47.93 ID:uwJwvBsv - >>874
> あとpublicをprivateにしても何も変わらんよ そう思ってたんだけどね。 参照型の配列サイズが決まる、もしくは配列が作られて tc1 tc1[0] null tc1[1] null tc1[2] null これを期待したら tc1 null のままだったから質問をしてみた。 メソッド内に書いた場合は期待通りだから、メソッド外で挙動が違うのかな?とか Unityはエディタのインスペクタ表示が絡むからpublicとprivateで挙動が違うのかな?とか
|
- ふらっと C#,C♯,C#(初心者用) Part113
881 :デフォルトの名無しさん[sage]:2014/12/14(日) 21:07:19.26 ID:uwJwvBsv - >>875
> ぬるぽで落ちたから、で判断したんじゃないよな? デバッガ(VC2013+VCT)で配列に格納する前の行にブレークポイントをかけて 変数を見てるチェックしてます。 最初の書きこみのときはVCTをつかってなかったので if で判定してプリントデバッグでしました。
|
- ふらっと C#,C♯,C#(初心者用) Part113
885 :デフォルトの名無しさん[sage]:2014/12/14(日) 21:26:21.74 ID:uwJwvBsv - 再現コードのつもりで書いたものが普通にちゃんと動いた。
わけわからぬ… using UnityEngine; using System.Collections; public enum TEAMTYPE : int{ TEAMTYPEFRIEND=0, TEAMTYPEENEMY } public PartyState class { public TEAMTYPE Team; } public class AAAclas : MonoBehaviour { public PartyState[] FriendParty= new PartyUnitState[5]; private PartyState[] EnemyParty= new PartyUnitState[5]; Start() { if ( FriendParty==null ) { Debug.Log("friend null DAZE"); } if ( EnemyParty==null ) { Debug.Log("Enemy null DAZE"); } } }
|
- ふらっと C#,C♯,C#(初心者用) Part113
886 :デフォルトの名無しさん[sage]:2014/12/14(日) 21:29:36.23 ID:uwJwvBsv - >>884
タイプミスしちゃってて申し訳ない VisualStudio2013pro + VisualStudioTools for unity VS2013+VST が正しい感じの表記 ちなみにこれ https://visualstudiogallery.msdn.microsoft.com/20b80b8c-659b-45ef-96c1-437828fe7cf2
|
- ふらっと C#,C♯,C#(初心者用) Part113
889 :デフォルトの名無しさん[sage]:2014/12/14(日) 21:59:23.48 ID:uwJwvBsv - >>887
public PartyState[] FriendParty; Start(){ FriendParty = new PartyState[5]; } こう書いていたものを宣言でまとめてできるっぽいぞ?int[]では出来たし、と思って public PartyState[] FriendParty= new PartyState[5]; こう変えたらだめだった、という。 885の再現コードがさりげなくバグあり()だったりと酷い状況ですので ここらで失礼します。 後日原因が分かったら極力簡潔なかたちで報告したいと思います。 テストコード埋め込んでたらソースがぐちゃぐちゃに・・・
|