C#自學之旅 第二週-習題

project1

MyClass.cs

/*
 * Created by SharpDevelop.
 * User: wangl
 * Date: 2020/03/09
 * Time: 16:57
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.IO;
using System.Data.Linq;
using System.Data.Linq.Mapping;
using System.Linq;
using System.Reflection;
namespace project1
{
	/// <summary>
	/// Description of MyClass.
	/// </summary>
	interface ISearchInter
	{
		String SearchByName(String type,String path,String key);
	}
	public abstract class Search : ISearchInter
	{

		public String SearchByName(String type,String path,String key){
				if(path != "")
				{
					Regex regex = new Regex(@"^([a-zA-Z]:\\)?[^\/\:\*\?\""\<\>\|\,]+$");
					bool m = regex.IsMatch(path);
					if(!m)
					{
						MessageBox.Show("入力文字列の形式が正しくありません。");
					}
				}
				DirectoryInfo dir = new DirectoryInfo(path);
				List<FileInfo> list = new List<FileInfo>();
				foreach(FileInfo file in dir.GetFiles())
				{
					list.Add(file);
				}
				Type t = Type.GetType(type);
				Object obj = Activator.CreateInstance(t);
				MethodInfo method1 = t.GetMethod("keyFile",BindingFlags.Public | BindingFlags.Instance,null,new Type[]{typeof(List<FileInfo>),typeof(String)},null);
				Object result1 = method1.Invoke(obj,new Object[]{list,key});
				
				MethodInfo method2 = t.GetMethod("sortKey",BindingFlags.Public | BindingFlags.Instance,null,new Type[]{typeof(List<FileInfo>)},null);
				Object result2 = method2.Invoke(obj,new Object[]{result1});
				
				String result = null;
				foreach(String str in result2 as List<String>)
				{
					result = result + str + "\r\n";
				}
				return result;
		}
		
		public virtual List<FileInfo> keyFile(List<FileInfo> list,String key)
		{
			List<FileInfo> keyList = new List<FileInfo>();
			foreach(FileInfo str in list){
				if(str.Name.Contains(key)){
					keyList.Add(str);
				}
			}
			return keyList;
		}
		
	  public abstract List<String> sortKey (List<FileInfo> list);
	}
	
	public class wangLin : Search
	{
		public override List<FileInfo> keyFile(List<FileInfo> list,String key) {
			List<FileInfo> keyList = new List<FileInfo>();
			foreach(FileInfo ex in list){
				String extension = Path.GetExtension(ex.Name);
				if(extension == key){
					keyList.Add(ex);
				}
			}
			return keyList;
		}
		public override List<String> sortKey (List<FileInfo> list){
			List<String> toStrList = new List<String>();
			foreach(FileInfo file in list){
				toStrList.Add(file.Name);
			}
			List<String> sortList = toStrList.OrderBy(m => m).ToList();
			List<String> result = new List<String>();
			if(sortList.Count>10){
				for(int i = 0;i<10;i++){
				result.Add(sortList[i]);
			}
			} else {
				result = sortList;
			}
			return result;
		}
	}
	public class sortTest : Search {
		public override List<String> sortKey (List<FileInfo> list) {
			List<String> lenList = new List<string>();
			foreach(FileInfo file in list){
				lenList.Add(file.Length.ToString());
			}
			return lenList.OrderByDescending(x=>x).ToList();
		}
	}
	public class keyTest2 : Search {
		public override List<FileInfo> keyFile(List<FileInfo> list,String key) {
			List<FileInfo> keyList = new List<FileInfo>();
			foreach(FileInfo ex in list){
				String extension = Path.GetExtension(ex.Name);
				if(extension == key){
					keyList.Add(ex);
				}
			}
			return keyList;
		}
		public override List<String> sortKey (List<FileInfo> list){
			List<String> toStrList = new List<String>();
			foreach(FileInfo file in list){
				toStrList.Add(file.Name);
			}
			List<String> sortList = toStrList.OrderBy(m => m).ToList();
			return sortList;
		}
	}
}

project2

Class1.cs

/*
 * Created by SharpDevelop.
 * User: wangl
 * Date: 2020/03/09
 * Time: 16:57
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using project1;
namespace project2
{
	/// <summary>
	/// Description of Class1.
	/// </summary>
	public class Factory
	{
		public Factory()
		{
		}
		public Search CreateClass(String classType){
			Search search = null;
			switch(classType){
				case "project1.wangLin":
					{
						search = new wangLin();
					}
					break;
				case "project1.sortTest":
					{
						search = new sortTest();
					}
					break;
				case "project1.keyTest2":
					{
						search = new keyTest2();
					}
					break;
			}
			return search;
		}
	}
}

Class2.cs

/*
 * Created by SharpDevelop.
 * User: wangl
 * Date: 2020/03/09
 * Time: 16:57
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;

namespace project2
{
	/// <summary>
	/// Description of Class2.
	/// </summary>
	public class Class2
	{
		public Class2()
		{
		}
		private String path ;
	    private String keyWord ;
		private String type;
		
		public String Path
		{
			set {path = value;}
			get {return path;}
		}
		public String KeyWord
		{
			set {keyWord = value;}
			get {return keyWord;}
			
		}
		public String Type
		{
			set {type = value;}
			get {return type;}
			
		}
	}
}

Program.cs

/*
 * Created by SharpDevelop.
 * User: wangl
 * Date: 2020/03/09
 * Time: 16:57
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Windows.Forms;

namespace project2
{
	/// <summary>
	/// Class with program entry point.
	/// </summary>
	internal sealed class Program
	{
		/// <summary>
		/// Program entry point.
		/// </summary>
		[STAThread]
		private static void Main(string[] args)
		{
			Application.EnableVisualStyles();
			Application.SetCompatibleTextRenderingDefault(false);
			Application.Run(new MainForm());
		}
		
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章