質問
画像サイズの計算を行うベースクラスがあります。私はそれからクラスを導き出し、コードで使用される事前定義された画像サイズを持っています。私が働いていることは、私はそれを適切にやっていないという強い気持ちを持っています。
理想的には、derviedclass.previewsizeをパラメーターとしてgetWidthのインスタンスを作成することなく渡したいと思います。
class Program
{
static void Main(string[] args)
{
ProfilePics d = new ProfilePics();
Guid UserId = Guid.NewGuid();
ProfilePics.Preview PreviewSize = new ProfilePics.Preview();
d.Save(UserId, PreviewSize);
}
}
class ProfilePicsBase
{
public interface ISize
{
int Width { get; }
int Height { get; }
}
public void Save(Guid UserId, ISize Size)
{
string PicPath = GetTempPath(UserId);
Media.ResizeImage(PicPath, Size.Width, Size.Height);
}
}
class ProfilePics : ProfilePicsBase
{
public class Preview : ISize
{
public int Width { get { return 200; } }
public int Height { get { return 160; } }
}
}
解決
あなたはより柔軟な実装を望んでいるように思えます ISize
- 実装を持っています いつも 同じ値を返すことはかなり無意味に思えます。一方、プレビューに常に使用するサイズを簡単に取得する簡単な方法が必要であることがわかります。私はこのようにそれをします:
// Immutable implementation of ISize
public class FixedSize : ISize
{
public static readonly FixedSize Preview = new FixedSize(200, 160);
private readonly int width;
private readonly int height;
public int Width { get { return width; } }
public int Height { get { return height; } }
public FixedSize(int width, int height)
{
this.width = width;
this.height = height;
}
}
それからあなたは書くことができます:
ProfilePics d = new ProfilePics();
Guid userId = Guid.NewGuid();
d.Save(userId, FixedSize.Preview);
これは同じインスタンスを再利用します FixedSize
あなたがそれを呼んだときはいつでも。
他のヒント
ニーズに応じて、これを行う方法はいくつかあります。別のインターフェイス、セットアップを行うことを検討します。このようなもの。
public interface ISizedPics
{
int Width {get; }
int Height {get; }
void Save(Guid userId)
}
public class ProfilePics, iSizedPics
{
public int Width { get { return 200; } }
public int Height { get { return 160; } }
public void Save(Guid UserId)
{
//Do your save here
}
}
それから、これが完了すると、実際にこのように作業することができます。
ISizedPics picInstance = new ProfilePics;
Guid myId = Guid.NewGuid();
picInstance.Save(myId);
これはそれを行う1つの方法にすぎません。私はこの方法が好きです。必要に応じてインスタンスを宣言するのに役立つ工場クラスを簡単に作成できるからです。
所属していません StackOverflow