Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Come eliminare l'attributo static da un codice (C# programmazione)?

    Ciao, ho bisogno di modificare questo codice facendo in modo di non utilizzare l'attributo static per implementare i metodi e le classi. Dopo avere eliminato dal codice le Keywords static dal codice, che devo fare? Grazie mille in anticipo

    codice:
    using System;
    using System.Net;namespace NetCalc
    {
    	/// <summary>
    	/// Summary description for IPTool.
    	/// </summary>
    	public class IPTool
    	{
    		// first (0x00) only for fill - so array starts with bit 1
    		static byte [] bit = { 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, (byte)0x80 };
    		
    		protected string ip = null;
    		protected byte [] ipBytes = null;
    		//protected byte a,b,c,d;
    		protected int networkPrefix; // z.b. 24 for /24
    		protected bool firstSubNetBit = false;		public IPTool(string ip)
    		{
    			this.setIp(ip);
    		}		public static byte getBit(int bit)
    		{
    			byte r = 0;
    			if(bit >= 1 && bit <= 8)
    				r = IPTool.bit[bit];			return r; 
    		}
    	
    		public static byte setBit(byte b, int bit)
    		{
    			if(bit >= 1 && bit <= 8)
    				return (byte) (b | IPTool.bit[bit]);
    			else return 0;
    		}		public static bool isBitSet(byte b, int bit)
    		{
    			bool r = false;
    			if(bit >= 1 && bit <= 8)	
    				r = ((b & IPTool.bit[bit]) != 0);
    				
    			return r;
    		}
    		/*
    		 * return true if domainName is an IP
    		 */
    		static public bool isIP (String domainName)
    		{
    			//if (domainName.matches("[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}"))
    			if (domainName.Equals("[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}"))
    				return true;
    			else return false;
    		}
    	
    		/*
    		 * Converts (unsigned)byte to int
    		 */
    		public static int byte2int (byte b)
    		{
    			int i = b;
    			if (b < 0) i = b & 0x7f + 128;
    		
    			return i;
    		}
    	
    		// return first byte of IP
    		public byte get1Byte ()
    		{
    			return this.ipBytes[0];
    		}
    	
    		//	return second byte of IP
    		public byte get2Byte ()
    		{
    			return this.ipBytes[1];
    		}		//	return third byte of IP
    		public byte get3Byte ()
    		{
    			return this.ipBytes[2];
    		}
    	
    		//	return fourth byte of IP
    		public byte get4Byte ()
    		{
    			return this.ipBytes[3];
    		}		//	return array with all bytes of IP
    		public byte [] getBytes()
    		{
    			//return InetAddress.getByName(this.ip).getAddress();
    			//return Dns.GetHostByName(this.ip).AddressList;
    			return IPAddress.Parse(this.ip).GetAddressBytes();
    		}		public String getIp() 
    		{
    			return this.ip;
    		}		public void setIp(String ip)
    		{
    			this.ip = ip;
    			this.ipBytes = getBytes();
    			this.setPrefix2NetworkClassPrefix();
    		}		public void setPrefix2NetworkClassPrefix ()
    		{
    			this.setNetworkPrefix(this.getNetworkClassPrefix());
    		}		public int getNetworkClassPrefix ()
    		{
    			// set network-prefix with Class-Type
    			int netClass = getNetworkClass();
    			switch (netClass)
    			{
    				case 0: return 8;	// Class A
    				case 1: return 16;	// Class B									
    				case 2: return 24;	// Class C
    					//default: setNetworkPrefix(-1);	// other Classes have no default Prefix										
    			}
    			return -1;
    		}		/*
    		* return -1 if out of range (0-255) or other error
    		*/
    		private int convertIPByte(String ipByte)
    		{
    			//int res = Integer.valueOf(ipByte).intValue();
    			int res = Int32.Parse(ipByte);
    			if (res < 0 || res > 255) 
    			{
    				res = -1;
    				this.ip = null;
    			} 
    			return res;
    		}		/**
    		 * @return
    		 */
    		public int getNetworkPrefix() 
    		{
    			return this.networkPrefix;
    		}		/**
    		 * @param prefix
    		 */
    		public void setNetworkPrefix(int prefix) 
    		{
    			this.networkPrefix = prefix;
    		}		public String getNetworkClassName ()
    		{
    			switch (this.getNetworkClass())
    			{
    				case 0:  return "Class A";
    				case 1:  return "Class B";
    				case 2:  return "Class C";
    				case 3:  return "Class D/Multicast";
    				case 4:  return "Class E/not used";		
    				default: return "error";
    			}
    		}
    	
    		/*
    		 * 0=Class A
    		 * 1=Class B
    		 * 2=Class C
    		 * 3=Class D
    		 * 4=Class E
    		 * -1=error
    		 */
    		public int getNetworkClass ()
    		{
    			// Test Class A: first bit=0
    			if (!IPTool.isBitSet(this.get1Byte(),8)) return 0;
    				// Test Class B: first 2bit=10
    			else if (!IPTool.isBitSet(this.get1Byte(),7)) return 1;
    				//	Test Class C: first 3bit=110
    			else if (!IPTool.isBitSet(this.get1Byte(),6)) return 2;
    				//	Test Class D: first 4bit=1110
    			else if (!IPTool.isBitSet(this.get1Byte(),5)) return 3;
    				//	Test Class E: first 4bit=1111 ( = all other)
    				//		else if (!IPTool.isBitSet(this.get1Byte(),8)) return 4;
    			else return 4;		
    			/*		
    					// Test Class A: first bit=0
    					if ((this.get1Byte() | (byte)0x7f) == (byte)0x7f) return 0;
    					//	Test Class B: first 2bit=10
    					if ((this.get1Byte() | 0xbf) == 0xbf) return 1;
    					//	Test Class C: first 3bit=110
    					if ((this.get1Byte() | 0xdf) == 0xdf) return 2;
    					//	Test Class D: first 4bit=1110
    					if ((this.get1Byte() | 0xef) == 0xef) return 3;
    					//	Test Class E: first 4bit=1111
    					if ((this.get1Byte() & 0xf0) == 0xf0) return 4;		
    					return -1;
    			*/		
    		
    		}		public String getNetworkMask ()
    		{
    			return getNetworkMaskByPrefix (this.networkPrefix);
    		}
    	
    		public String getNetworkMaskByPrefix (int prefix)
    		{
    			switch (prefix)
    			{
    				case  8: return "255.0.0.0";
    				case  9: return "255.128.0.0";
    				case 10: return "255.192.0.0";
    				case 11: return "255.224.0.0";
    				case 12: return "255.240.0.0";
    				case 13: return "255.248.0.0";
    				case 14: return "255.252.0.0";
    				case 15: return "255.254.0.0";
    				case 16: return "255.255.0.0";
    				case 17: return "255.255.128.0";
    				case 18: return "255.255.192.0";
    				case 19: return "255.255.224.0";
    				case 20: return "255.255.240.0";
    				case 21: return "255.255.248.0";
    				case 22: return "255.255.252.0";
    				case 23: return "255.255.254.0";
    				case 24: return "255.255.255.0";
    				case 25: return "255.255.255.128";
    				case 26: return "255.255.255.192";
    				case 27: return "255.255.255.224";
    				case 28: return "255.255.255.240";
    				case 29: return "255.255.255.248";
    				case 30: return "255.255.255.252";
    				default: return "";
    			}
    		}
    	
    		public int getMaxNetworkHosts ()
    		{
    			// 2^(32-networkprefix)
    			// -2 ... because .0 and .255
    			return ((int)Math.Pow(2,(32-this.networkPrefix)))-2;
    		}
    	
    		public int getMaxSubNets ()
    		{
    			// Bits from Subnet = prefix-class_prefix
    		
    			int count = (int)Math.Pow(2, this.networkPrefix - this.getNetworkClassPrefix());
    		
    			//	-2 because 1 bit for routing
    			if (!this.isFirstSubNetBit() || this.getNetworkClassPrefix()==this.networkPrefix)
    				count-=2;
    		
    			if (count < 0 ) count = 0;
    			return count;
    		}
    	
    		public long getNetworkLong ()
    		{
    			long mask = (long)Math.Pow (2, this.networkPrefix)-1;
    			mask = mask << (32-this.networkPrefix);
    		
    			return (mask & ip2Long());
    		}		public String getNetwork ()
    		{
    			return long2String(getNetworkLong());
    		}		public long getBroadCastLong ()
    		{
    			long netMask = (long)Math.Pow (2, this.networkPrefix)-1;
    			netMask = netMask << (32-this.networkPrefix);
    			long hostMask = (long) Math.Pow(2, 32-this.networkPrefix)-1;			return (netMask = (ip2Long() & netMask) | hostMask);	
    		}		public String getBroadCast ()
    		{
    			return long2String(getBroadCastLong());	
    		}	
    		public String[] getNetworkIPRange ()
    		{
    			String [] result = new String [2];
    			//String from, to;
    			/**
    			 * Start
    			 * +1 because first = network
    			 */
    			result [0] = long2String (getNetworkLong() + 1);	
    			/**
    			 * End
    			 * -1 because last = broadcast
    			 */
    			result [1] = long2String(getBroadCastLong() -1);
    			return result;
    		}
    	
    		public long ip2Long ()
    		{
    			return ((long)(IPTool.byte2int(this.get1Byte()) * 256 + 
    				IPTool.byte2int(this.get2Byte())) * 256 + 
    				IPTool.byte2int(this.get3Byte())) * 256 + 
    				IPTool.byte2int(this.get4Byte());
    		}
    	
    		public String long2String (long ip)
    		{
    			long a = (long)(ip & 0xff000000) >> 24;
    			long b = (long)(ip & 0x00ff0000) >> 16;
    			long c = (long)(ip & 0x0000ff00) >> 8;
    			long d = (long)(ip & 0xff);			return a+"."+b+"."+c+"."+d;
    		}	
    		
    		public bool isFirstSubNetBit() 
    		{
    			return firstSubNetBit;
    		}		public void setFirstSubNetBit(bool b) 
    		{
    			firstSubNetBit = b;
    		}		public static IPTool getNextIP (String ip)
    		{
    			IPTool nextIp = new IPTool (ip);
    			nextIp.setIp(nextIp.long2String(nextIp.ip2Long()+(long)1));			return nextIp;		}		public IPTool getNextSubNet (long numberOfHosts)
    		{
    			IPTool ip = IPTool.getNextIP(this.getBroadCast());
    			ip.setIp(this.long2String(ip.ip2Long()+(long)1));
    			ip.setFirstSubNetBit(this.isFirstSubNetBit());
    		
    			int lastPrefix = ip.getNetworkClassPrefix();
    		
    			int prefix = 30;
    			do 
    			{
    				if (prefix < ip.getNetworkClassPrefix()) 
    					return null; // no subnet found
    				ip.setNetworkPrefix(prefix);
    				prefix--;
    				// ignore subnetbit?
    				if (!ip.isFirstSubNetBit() && prefix == lastPrefix+1) prefix--;
    			
    			}
    			while (ip.getMaxNetworkHosts() < numberOfHosts);			return ip;
    		}
    	}
    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    C# viene trattato assieme a tutti i suoi fratelli nel forum dedicato a VisualBasic e .NET Framework.

    Sposto.

    PS: non utilizzare il grassetto per descrivere i problemi, utilizzalo solo per enfatizzare dove serve.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3

    Re: Come eliminare l'attributo static da un codice (C# programmazione)?

    Originariamente inviato da caste_vega
    Ciao, ho bisogno di modificare questo codice facendo in modo di non utilizzare l'attributo static per implementare i metodi e le classi. Dopo avere eliminato dal codice le Keywords static dal codice, che devo fare?
    Può anche darsi che tu non debba fare nient'altro.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249

    Re: Come eliminare l'attributo static da un codice (C# programmazione)?

    Originariamente inviato da caste_vega
    Ciao, ho bisogno di modificare questo codice facendo in modo di non utilizzare l'attributo static per implementare i metodi e le classi. Dopo avere eliminato dal codice le Keywords static dal codice, che devo fare? Grazie mille in anticipo
    che senso ha fare questo? se un programmatore ha deciso di far diventare un metodo static ci sarà una ragione. o no?
    I got the remedy

  5. #5
    Sì, in effetti non ha molto senso... credevo che tutti i metodi della classe fossero implementati come static, creando una specie di unica istanza della classe quando ne potrebbero essere necessarie diverse (mi è capitato di imbattermi in classi costruite in modo così demenziale); in questo caso invece la classe mi pare a posto, lasciala com'è che va bene.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.