知识点梳理(封装,泛型)
程序员文章站
2024-03-15 12:58:17
...
7.2知识点梳理(封装,泛型)
扩展:
out》用途: 如果返回多个不同类型的值的时候,返回数组就不行了,那么这个时候,可以考虑使用out参数。out参数要求在离开方法内部以前必须赋值.
static void Main(string[] args)
{
int[] nums = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int max;
int min;
int sum;
int avg;
string s;
// 方法调用要带上out
Test(nums, out max, out min, out sum, out avg, out s);
Console.WriteLine(max);
Console.WriteLine(min);
Console.WriteLine(sum);
Console.WriteLine(avg);
Console.WriteLine(s);
Console.ReadKey();
}
public static void Test(int[] nums, out int max, out int min, out int sum, out int avg, out string s)//5个out参数修饰的是多余的返回值
{
//out参数必须在方法内部为其赋值,否则返回去没有意义
max = nums[0];
min = nums[0];
sum = 0;
for (int i = 0; i < nums.Length; i++)
{
if (nums[i] > max)
{
max = nums[i];
}
if (nums[i] < min)
{
min = nums[i];
}
sum += nums[i];
}
avg = sum / nums.Length;
//此方法void无返回值,无需写return
s = "Test_Result";
}
2,封装函数
新建consle工程,生成属性勾选XML选项;尽量将namespace 空间改为和dll文件名相同:需要注释则在函数前面添加(一定要是vs自带的注释)
using HalconDotNet;
namespace Class1
{
public class myclass
{
/// <summary>
/// 添加Add函数,为dll文件添加注释
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <returns></returns>
public HObject ho_image;
public int Add(int a,int b)
{
return a + b;
}
/// <summary>
/// 读取图像格式;
/// </summary>
public void ReadImage(string imagepath,HTuple window)
{
HOperatorSet.GenEmptyObj(out ho_image);
HOperatorSet.ReadImage(out ho_image, imagepath);
HOperatorSet.DispImage(ho_image, window);
//return ho_image;
}
}
编译生成dll文件;
二、引用
添加命名空间 Class1;
using Class1;
最后实例化之后调用,
myclass m = new myclass();
label1.Text = m.Add(3,5).ToString();
注:引用里面也可以引用其他的dll文件,不影响结果;
3,bitmap与byte[]的转换
Bitmap => byte[]
Bitmap b = new Bitmap( "test.bmp ");
MemoryStream ms = new MemoryStream();
b.Save(ms,System.Drawing.Imaging.ImageFormat.Bmp);
byte[] bytes= ms.GetBuffer(); //byte[] bytes= ms.ToArray(); 这两句都可以,至于区别么,下面有解释
ms.Close();
byte[] => Bitmap
byte[] bytelist=bytes;
MemoryStream ms1 = new MemoryStream(bytelist);
Bitmap bm = (Bitmap)Image.FromStream(ms1);
ms1.Close();
4,泛型:
class Stack<T>
{
private int count = 0;
private T[] arr;
public Stack(int size)
{
arr = new T[size];
}
public void push(T x)
{
arr[count++] = x;
}
public T pop()
{
return arr[--count];
}
}
class test
{
static void Main()
{
Stack<int> s1 = new Stack<int>(3);
s1.push(1);
s1.push(23);
Console.WriteLine(s1.pop() + s1.pop());//由于pop返回的是object类型必须转换之后才能使用
}
}
5.using
-
重命名:using kkkkkkk=system.console;
-
引用多个 using(Sqlconnection conn=new SqlConnection(“server=ct//SQLEXPRESS;database=db_14;integrated security=true”))