Excel如何設置動態求和 Excel設置動態求和方法
769
2025-04-01
視頻:https://edu.csdn.net/course/detail/27107
多態
什么是多態,看看大辭典的:可以呈現不同形式的能力或狀態。這一術語來源于生物系統,意指同族生物具有的相同特征。而在.Net中,多態指同一操作作用于不同的實例,產生不同運行結果的機制。
多態可以分為靜態多態和動態,即編譯時多態和運行時多態。靜態多態比如,漢語中有“打”這個字,但是與不同的字組合,則形成了不同的單詞組合,來代表不同的含義,如打飯、打架、打車、打卡等,這種方式是在實現已經定義好了的意思,不管誰打飯、誰打架都代表一樣的意思,類似于編譯器首先將同名稱的代碼定義好了,編程中的具體實現是重載;
靜態多態:即編譯器就確定類、方法的關聯關系,一般以方法重載來實現。如我們熟悉的計算器為例:
/*功能:實現計算器;將計算功能和用戶輸入分離
時間:08/09/09?星期二?第二節課
版本:6.1.1
//構成方法重載的前提是;方法名一致,參數個數不同、參數類型不一致、參數順序不一樣
*/
usingSystem;
class Calc
{
private double result; //再增加一個結果變量
public double Jia(double num1,doublenum2) //加法運算:形參:num1,num2
{
result=num1+num2+100;
return result;
}
public int Jia(int num1,int num2)
{
result=num1+num2+200;
return (int)result;
}
publicdouble Jian(double num1,double num2) //減法運算
{
result=num1-num2;
return result;
}
public int Jian(int num1,int num2) //減法運算
{
result=num1-num2;
return (int)result;
}
public double Cheng(double num1,double num2) //乘法運算
{
result=num1*num2;
return result;
}
public double Chu(double num1,doublenum2) //除法運算
{
result=num1/num2;
return result;
}
public double PingFang(double num1)
{
result=num1*num1;
return result;
}
public double NciFang(double num1,doublenum2) //num1:2的num2:5次方
{
result=1; //定義result為1
for(int i=1;i<=num2;i++)
{
result=result*num1;
}
return result;
}
}
/**********客戶端類,即界面類***********/
classClacGUI
{
static void Main()
{
Calc jisuanqi; //jisuanqi=?
jisuanqi=new Calc();
int x,y; //x,y為Main()的局部變量
Console.Write("請輸入第一個數字:");
x=Convert.ToInt32(Console.ReadLine());
Console.Write("請輸入第二個數字:");
y=Convert.ToInt32(Console.ReadLine());
char op; //op為Main()的局部變量,表示操作符
Console.Write("請輸入您要進行的運算:+ - * / ^:"); //^:表示求N次方
op=Convert.ToChar(Console.ReadLine());
switch(op)
{
case '+': //加運算
Console.WriteLine(jisuanqi.Jia(x,y));
break;
case '-':
Console.WriteLine(jisuanqi.Jian(x,y));
break;
case '*': //加運算
Console.WriteLine(jisuanqi.Cheng(x,y));
break;
case '/':
if(y==0)
Console.WriteLine("除數不能為0");
else
Console.WriteLine(jisuanqi.Chu(x,y));
break;
case '^':
Console.WriteLine(jisuanqi.NciFang(x,y));
break;
default:
Console.WriteLine("其他無效選擇!!!");
break;
}
}
}
動態多態:也叫動態綁定(后期綁定),是在運行時通過虛方法、重寫機制來實現。在.Net中虛方法以virtual關鍵字來標記。再來復習下virtual和override。
virtual關鍵字用于修飾方法、屬性、索引器或事件聲明,并使它們可以在派生類中被重寫。例如,此方法可被任何繼承它的類重寫。
默認情況下,方法是非虛擬的。不能重寫非虛方法。
在該示例中,Dimensions類包含x、y兩個坐標和Area()虛方法。不同的形狀類,如Circle、Cylinder和Sphere繼承Dimensions類,并為每個圖形計算表面積。每個派生類都有各自的Area()重寫實現。根據與此方法關聯的對象,通過調用適當的Area()實現,程序為每個圖形計算并顯示適當的面積。
在前面的示例中,注意繼承的類 Circle、Sphere和Cylinder都使用了初始化基類的構造函數,
using System;
class TestClass
{
publicclass Dimensions
{
public const double PI = Math.PI;
protecteddouble x, y;
public Dimensions()
{
}
public Dimensions(double x, double y)
{
this.x = x;
this.y = y;
}
public virtual double Area()
{
return x * y;
}
}
public class Circle : Dimensions
{
public Circle(double r) : base(r, 0)
{
}
public override double Area()
{
return PI * x * x;
}
}
classSphere : Dimensions
{
public Sphere(double r) : base(r, 0)
{
}
public override double Area()
{
return 4 * PI * x * x;
}
}
classCylinder : Dimensions
{
public Cylinder(double r, double h) : base(r, h)
{
}
public override double Area()
{
return 2 * PI * x * x + 2 * PI * x * y;
}
}
staticvoid Main()
{
double r = 3.0, h = 5.0;
Dimensions c = new Circle(r);
Dimensions s = new Sphere(r);
Dimensions l = new Cylinder(r, h);
// Displayresults:
Console.WriteLine("Area of Circle = {0:F2}", c.Area());
Console.WriteLine("Area of Sphere = {0:F2}", s.Area());
Console.WriteLine("Area of Cylinder = {0:F2}", l.Area());
}
}
效果如下:
Area ofCircle?? = 28.27
Area ofSphere?? = 113.10
Area ofCylinder = 150.80
虛方法和抽象方法的區別如下:
動態多態程序案例如下:
using System;
public class DrawingObject
{
public virtual void Draw()
{
Console.WriteLine("畫形狀的基類");
}
}
public class Line :DrawingObject
{
public override void Draw()
{
Console.WriteLine("畫一條線");
}
}
public class Circle : DrawingObject
{
public override void Draw()
{
Console.WriteLine("畫一個圓");
}
}
public class Square : DrawingObject
{
public override void Draw()
{
Console.WriteLine("畫一個正方形");
}
}
public classDrawDemo
{
public static int Main(string[] args)
{
DrawingObject[] dObj = new DrawingObject[4];
dObj[0] = new Line();
dObj[1] = new Circle();
dObj[2] = new Square();
dObj[3] = new DrawingObject();
foreach (DrawingObject drawObj in dObj)
{
drawObj.Draw();
}
return 0;
}
}
輸出結果是:
畫一條線
畫一個圓
畫一個正方形
畫形狀的基類
/*代碼分析:
在DrawDemo類中的Main()方法中,創建了一個數組,數組元素是DrawingObject 類的對象。該數組名為dObj,是由四個DrawingObject類型的對象組成。
接下來, 初始化dObj數組, 由于Line, Circle和Square類都是DrawingObject類的派生類,所以這些類可以作為dObj數組元素的類型。 如果C#沒有這種功能,你得為每個類創建一個數組。繼承的性質可以讓派生對象當作基類成員一樣用,這樣就節省了編程工作量。
一旦數組初始化之后,接著是執行foreach循環,尋找數組中的每個元素。在每次循環中, dObj 數組的每個元素(對象)調用其Draw()方法。多態性體現在:在運行時,各自調用每個對象的Draw()方法。盡管dObj 數組中的引用對象類型是DrawingObject,這并不影響派生類重載DrawingObject 類的虛方法Draw()。 在dObj 數組中,通過指向DrawingObject 基類的指針來調用派生類中的重載的Draw()方法。
*/
實踐問題:
1.??? 關于實現多態下面哪個選項是不正確的?()
A.你可以通過實現接口來實現多態???? C.你可以通過繼承實現多態
C.你可以通過封裝實現多態??????????????? D.你可以通過使用抽象類實現多態
2.下面哪個是函數重載的例子?()
A.? void example();??????????????????? B.? voidexample1();
char example();??????????????????????? void example2();
C.??? void example1(int,int);??????????? D.? voidexample1(int,int);
void example2(char,char);????????????? void example1(char,char);
3.下列哪個不屬于函數簽名:()
A.參數類型???? B.參數順序??????? C.參數數量?????? D.參數名稱
4.考慮下面的語句:
A.在動態多態中,程序的適當方法可以被調用,依賴于上下文。
B.在前期綁定中,函數在運行時被綁定。
5關于這些語句下面哪個選項是正確的?()
A.語句A為真,語句B為假????? B. 語句A為假,語句B為真
C.兩個語句A和B都是真??????? D. 兩個語句A和B都是假
小結:
在本章中,我們主要學習了:
u??????多態是什么
u??????多態的分類和使用
u??????多態的好處
英語詞匯:
英文????????????全文????????????????????????????????????????中文
Hour?????????????????????????????????????????????????????? 小時
Maximum?????? ????????????????????????????????? ????????? ?????? 最大值
Minimum???????????????????????????????????????????????? 最小值
Argument??????????????????????????????????????????????? 參數
Location?????????????????????????????????????????? 定位
Chapter??????????????????????????????????????????? 章、節
Application????????????????????????????????????????????? 應用
Activity???????????????????????????????????????????? 活動
Debug???????????????????????????????????????????????????? 調試
Compare???????????????????????????????????????????????? 比較
Distance?????????????????????????????????????????? 區別、不同
Operator???????????????????????????????????????????????? 操作
Struct????????????????????????????????????????????????????? 結構
Binary???????????????????????????????????????????????????? 二進制
練習項目:
現在公司讓要開發一款程序,用來一鍵式打開常見的計算機資料,例如文檔、圖片和影音文件等,只需安裝一個程序就可以免了其他文件的管理,并且使用方便。簡單分析如下了改萬能加載器的功能點,考慮如下幾點:
n???自動加載各種資料,一站式搜索系統常見資料;
n???能夠打開常見文檔類資料,例如txt文件、word文件、pdf文件、Visio文件
n???能夠打開常見圖片資料,例如jpg格式文件、gif文件、png文件
n???能夠打開常見音頻資料和視頻資料,例如avi文件、mp3文件
支持簡單可用的類型擴展接口,易于實現更多文件類型的加載
C# 數據結構
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。