プロが教える店舗&オフィスのセキュリティ対策術

現在 C# でプログラミングをしています。
以下のような構造体 SomeStruct から FooA を利用することは可能でしょうか?
可能ならば、どのように修正すればいいでしょうか?

class SomeClass
{
public delegate double Foo(double bar);
public Foo FooA { get; set; }

public SomeClass(Foo f)
{
this.FooA = f;
}

struct SomeStruct
{
private double baz;
private double qux;
internal double Baz
{
get
{
return this.baz;
}
set
{
this.baz = value;
this.qux = FooA(value); // ここでエラーになる
}
}
internal double Qux
{
get
{
return this.qux;
}
}
}
}

A 回答 (2件)

SomeClassと SomeClass.SomeStructの実体の関係の中で 親子関係が無いのが原因では …


つまり
SomeClass obj1 = new SomeClass(new Foo(func1));
obj1.Baz = 3.2; // この行はエラーですよね …
SomeClassには Bazフィールドはありません

逆に
SomeStructのコンストラクタに SomeClassのインスタンスを与えて 親クラスを受け取るフィールドを設けて
struct SomeStruct
{
private double baz;
private double qux;

SomeClass m_parent;
// 親クラスのインスタンスを渡す
SomeStruct(SomeClass p)
{
m_parent = p;
baz = qux = 0.0;
}

internal double Baz
{
get { return baz; }
set { baz = value;
// インスタンス経由で デリゲートを呼び出す
qux = m_parent.FooA(value);
}
}

SomeClass obj1 = new SomeClass(new Foo(func1));
SomeClass.SomeStruct struc = new SomeClass.SomeStruct(obj1);
struc.Baz = 3.2;

といった具合にしてやればいいかも …
    • good
    • 0

具体的にどんなエラーになるんです?



>private double qux;
>public Foo FooA { get; set; }

FooAはプロパティで、型はFoo。
quxはdouble型ですから、Fooクラス(?)にdouble型に変換できるメソッドなりがないとダメそうな気が……。
    • good
    • 0
この回答へのお礼

エラー内容は「静的でないフィールド、メソッド、またはプロパティ 'SomeClass.FooA' で、オブジェクト参照が必要です」です。
Foo は double 型引数をひとつ得て double 型の値を返すデリゲートです(デリゲートのプロパティというのもなんだか変な話ですが……)。
実現したい処理というのが数学函数をメソッドとして、それ(の参照)を <FooA> に格納し、baz に独立変数がセットされたとき同時に従属変数 qux を <FooA> を元にセットしたい、というイメージなのですが……。

お礼日時:2017/06/08 12:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!