C#フレンドクラスとOOPの構成
-
24-09-2019 - |
質問
IはBで可視で生データを作成したいと思い、そのデータの再組織化バージョン(GUIレディ)を含む生データのセットを含むクラスA、クラスBを、与えられます。
明らかにクラスAの生データはプライベートメンバーに含まれています。私はC ++の友人のクラスのメソッドに似て何かを使用してもBにそのデータを可視化したいと思います。
どのように私はこれに近づくことができますか?
ありがとうございます。
解決
厳密に言えば、あなたがにデータを公開することができ、特定のクラス(またはクラスのリスト)を定義することはできません。ただし、同じアセンブリ内の任意のクラスのメンバーが利用できるようにされ、代わりにinternal
のprivate
のアクセス修飾子を使用することができます。
ということでは、あなたが強くは(私はあなたにさらすことにしている計画を推測している何である)ではなくフィールド以外のプロパティを介してこれらのメンバーをさらすことを検討すべきであると述べました。どちらかといえば - - これを行うと、クラスは、その情報が他のクラスとどのように露出させることができる方法を正確に定義することができます別のクラスは、データを変更したときに起こるはず。
。他のヒント
これはあなたを助けるかもしれないかもしれませ..
public class A
{
public A() { }
public string AccessData(object accessor)
{
if (accessor is B)
return "private_data";
else
throw new UnauthorizedAccessException();
}
}
public class B
{
public B() { }
private void AccessDataFromA()
{
Console.WriteLine(new A().AccessData(this));
}
}
あなたがアセンブリの両方を定義し、「内部」としてA内のフィールドをマーク可能性があります。
以上のオブジェクト指向のアプローチは、典型的には、単純なプロパティを介して、データ(又はデータのサブセット)へのアクセスを許可Aにおけるパブリックメソッドのセットを提供することである。
あなたの構造によっては、部分的なクラスを使用することができるかもしれません。これは、データとUIは、同じクラス内で実際に両方であることを意味しますが、あなたは別のファイル内でそれらを持っています。
それはあなたのために仕事をしない場合、は、その後、あなたはUIがより一般的な形で表していることをデータセットを代替または作業などの内部スコープの変数を持っています。
古い方法は、(しゃれが意図した)これらの値はせずにアクセスできなくなるように、ののgetValue()とのsetValue()の関数は、その値を返すために、単純なを定義することですこれらの関数を使用する、C#で、これらの機能は、メンバープロパティと呼ば事前定義されています。
class TestMethod{
private int Secret;
get { return Secret;}
set { Secret = value;}
}
他の人がちょうどinternal
修飾子を使用し、私の前に述べたようです。 は、他の方法は、にあります